Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

lst file(+)

Отправлено m16 31 марта 2007 г. 12:08
В ответ на: студия 4.12 , компилтся ровно 1к слов отправлено m16 31 марта 2007 г. 11:55


AVRASM ver. 2.1.9 D:\1\q.asm Sat Mar 31 12:02:01 2007

D:\1\q.asm(5): Including file 'C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\1200def.inc'





.include "1200def.inc"

;***** Created: 2006-10-03 09:16 ******* Source: AT90S1200.xml ***********
;*************************************************************************
;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y
;*
;* Number : AVR000
;* File Name : "1200def.inc"
;* Title : Register/Bit Definitions for the AT90S1200
;* Date : 2006-10-03
;* Version : 2.24
;* Support E-mail : avr@atmel.com
;* Target MCU : AT90S1200
;*
;* DESCRIPTION
;* When including this file in the assembly program file, all I/O register
;* names and I/O register bit names appearing in the data book can be used.
;* In addition, the six registers forming the three data pointers X, Y and
;* Z have been assigned names XL - ZH. Highest RAM address for Internal
;* SRAM is also defined
;*
;* The Register names are represented by their hexadecimal address.
;*
;* The Register Bit names are represented by their bit number (0-7).
;*
;* Please observe the difference in using the bit names with instructions
;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc"
;* (skip if bit in register set/cleared). The following example illustrates
;* this:
;*
;* in r16,PORTB ;read PORTB latch
;* sbr r16,(1< ;* out PORTB,r16 ;output to PORTB
;*
;* in r16,TIFR ;read the Timer Interrupt Flag Register
;* sbrc r16,TOV0 ;test the overflow flag (use bit#)
;* rjmp TOV0_is_set ;jump if set
;* ... ;otherwise do something else
;*************************************************************************

#ifndef _1200DEF_INC_
#define _1200DEF_INC_


#pragma partinc 0

; ***** SPECIFY DEVICE ***************************************************
.device AT90S1200
#pragma AVRPART ADMIN PART_NAME AT90S1200
.equ SIGNATURE_000 = 0x1e
.equ SIGNATURE_001 = 0x90
.equ SIGNATURE_002 = 0x01

#pragma AVRPART CORE CORE_VERSION V0


; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
.equ SREG = 0x3f
.equ GIMSK = 0x3b
.equ TIMSK = 0x39
.equ TIFR = 0x38
.equ MCUCR = 0x35
.equ TCCR0 = 0x33
.equ TCNT0 = 0x32
.equ WDTCR = 0x21
.equ EEAR = 0x1e
.equ EEDR = 0x1d
.equ EECR = 0x1c
.equ PORTB = 0x18
.equ DDRB = 0x17
.equ PINB = 0x16
.equ PORTD = 0x12
.equ DDRD = 0x11
.equ PIND = 0x10
.equ ACSR = 0x08


; ***** BIT DEFINITIONS **************************************************

; ***** TIMER_COUNTER_0 **************
; TIMSK - Timer/Counter Interrupt Mask Register
.equ TOIE0 = 1 ; Timer/Counter0 Overflow Interrupt Enable

; TIFR - Timer/Counter Interrupt Flag register
.equ TOV0 = 1 ; Timer/Counter0 Overflow Flag

; TCCR0 - Timer/Counter0 Control Register
.equ CS00 = 0 ; Clock Select0 bit 0
.equ CS01 = 1 ; Clock Select0 bit 1
.equ CS02 = 2 ; Clock Select0 bit 2

; TCNT0 - Timer Counter 0
.equ TCNT00 = 0 ; Timer Counter 0 bit 0
.equ TCNT01 = 1 ; Timer Counter 0 bit 1
.equ TCNT02 = 2 ; Timer Counter 0 bit 2
.equ TCNT03 = 3 ; Timer Counter 0 bit 3
.equ TCNT04 = 4 ; Timer Counter 0 bit 4
.equ TCNT05 = 5 ; Timer Counter 0 bit 5
.equ TCNT06 = 6 ; Timer Counter 0 bit 6
.equ TCNT07 = 7 ; Timer Counter 0 bit 7


; ***** WATCHDOG *********************
; WDTCR - Watchdog Timer Control Register
.equ WDP0 = 0 ; Watch Dog Timer Prescaler bit 0
.equ WDP1 = 1 ; Watch Dog Timer Prescaler bit 1
.equ WDP2 = 2 ; Watch Dog Timer Prescaler bit 2
.equ WDE = 3 ; Watch Dog Enable


; ***** PORTB ************************
; PORTB - Port B Data Register
.equ PORTB0 = 0 ; Port B Data Register bit 0
.equ PB0 = 0 ; For compatibility
.equ PORTB1 = 1 ; Port B Data Register bit 1
.equ PB1 = 1 ; For compatibility
.equ PORTB2 = 2 ; Port B Data Register bit 2
.equ PB2 = 2 ; For compatibility
.equ PORTB3 = 3 ; Port B Data Register bit 3
.equ PB3 = 3 ; For compatibility
.equ PORTB4 = 4 ; Port B Data Register bit 4
.equ PB4 = 4 ; For compatibility
.equ PORTB5 = 5 ; Port B Data Register bit 5
.equ PB5 = 5 ; For compatibility
.equ PORTB6 = 6 ; Port B Data Register bit 6
.equ PB6 = 6 ; For compatibility
.equ PORTB7 = 7 ; Port B Data Register bit 7
.equ PB7 = 7 ; For compatibility

; DDRB - Port B Data Direction Register
.equ DDB0 = 0 ; Port B Data Direction Register bit 0
.equ DDB1 = 1 ; Port B Data Direction Register bit 1
.equ DDB2 = 2 ; Port B Data Direction Register bit 2
.equ DDB3 = 3 ; Port B Data Direction Register bit 3
.equ DDB4 = 4 ; Port B Data Direction Register bit 4
.equ DDB5 = 5 ; Port B Data Direction Register bit 5
.equ DDB6 = 6 ; Port B Data Direction Register bit 6
.equ DDB7 = 7 ; Port B Data Direction Register bit 7

; PINB - Port B Input Pins
.equ PINB0 = 0 ; Port B Input Pins bit 0
.equ PINB1 = 1 ; Port B Input Pins bit 1
.equ PINB2 = 2 ; Port B Input Pins bit 2
.equ PINB3 = 3 ; Port B Input Pins bit 3
.equ PINB4 = 4 ; Port B Input Pins bit 4
.equ PINB5 = 5 ; Port B Input Pins bit 5
.equ PINB6 = 6 ; Port B Input Pins bit 6
.equ PINB7 = 7 ; Port B Input Pins bit 7


; ***** PORTD ************************
; PORTD - Data Register, Port D
.equ PORTD0 = 0 ;
.equ PD0 = 0 ; For compatibility
.equ PORTD1 = 1 ;
.equ PD1 = 1 ; For compatibility
.equ PORTD2 = 2 ;
.equ PD2 = 2 ; For compatibility
.equ PORTD3 = 3 ;
.equ PD3 = 3 ; For compatibility
.equ PORTD4 = 4 ;
.equ PD4 = 4 ; For compatibility
.equ PORTD5 = 5 ;
.equ PD5 = 5 ; For compatibility
.equ PORTD6 = 6 ;
.equ PD6 = 6 ; For compatibility

; DDRD
.equ DDD0 = 0 ;
.equ DDD1 = 1 ;
.equ DDD2 = 2 ;
.equ DDD3 = 3 ;
.equ DDD4 = 4 ;
.equ DDD5 = 5 ;
.equ DDD6 = 6 ;

; PIND - Input Pins, Port D
.equ PIND0 = 0 ;
.equ PIND1 = 1 ;
.equ PIND2 = 2 ;
.equ PIND3 = 3 ;
.equ PIND4 = 4 ;
.equ PIND5 = 5 ;
.equ PIND6 = 6 ;


; ***** ANALOG_COMPARATOR ************
; ACSR - Analog Comparator Control And Status Register
.equ ACIS0 = 0 ; Analog Comparator Interrupt Mode Select bit 0
.equ ACIS1 = 1 ; Analog Comparator Interrupt Mode Select bit 1
.equ ACIE = 3 ; Analog Comparator Interrupt Enable
.equ ACI = 4 ; Analog Comparator Interrupt Flag
.equ ACO = 5 ; Analog Comparator Output
.equ ACD = 7 ; Analog Comparator Disable


; ***** CPU **************************
; SREG - Status Register
.equ SREG_C = 0 ; Carry Flag
.equ SREG_Z = 1 ; Zero Flag
.equ SREG_N = 2 ; Negative Flag
.equ SREG_V = 3 ; Two's Complement Overflow Flag
.equ SREG_S = 4 ; Sign Bit
.equ SREG_H = 5 ; Half Carry Flag
.equ SREG_T = 6 ; Bit Copy Storage
.equ SREG_I = 7 ; Global Interrupt Enable

; MCUCR - MCU Control Register
.equ ISC00 = 0 ; Interrupt Sense Control 0 bit 0
.equ ISC01 = 1 ; Interrupt Sense Control 0 bit 1
.equ SM = 4 ; Sleep Mode
.equ SE = 5 ; Sleep Enable


; ***** EXTERNAL_INTERRUPT ***********
; GIMSK - General Interrupt Mask Register
.equ INT0 = 6 ; External Interrupt Request 0 Enable


; ***** EEPROM ***********************
; EEAR - EEPROM Read/Write Access
.equ EEAR0 = 0 ; EEPROM Read/Write Access bit 0
.equ EEAR1 = 1 ; EEPROM Read/Write Access bit 1
.equ EEAR2 = 2 ; EEPROM Read/Write Access bit 2
.equ EEAR3 = 3 ; EEPROM Read/Write Access bit 3
.equ EEAR4 = 4 ; EEPROM Read/Write Access bit 4
.equ EEAR5 = 5 ; EEPROM Read/Write Access bit 5
.equ EEAR6 = 6 ; EEPROM Read/Write Access bit 6

; EEDR - EEPROM Data Register
.equ EEDR0 = 0 ; EEPROM Data Register bit 0
.equ EEDR1 = 1 ; EEPROM Data Register bit 1
.equ EEDR2 = 2 ; EEPROM Data Register bit 2
.equ EEDR3 = 3 ; EEPROM Data Register bit 3
.equ EEDR4 = 4 ; EEPROM Data Register bit 4
.equ EEDR5 = 5 ; EEPROM Data Register bit 5
.equ EEDR6 = 6 ; EEPROM Data Register bit 6
.equ EEDR7 = 7 ; EEPROM Data Register bit 7

; EECR - EEPROM Control Register
.equ EERE = 0 ; EEPROM Read Enable
.equ EEWE = 1 ; EEPROM Write Enable



; ***** LOCKSBITS ********************************************************
.equ LB1 = 0 ; Lockbit
.equ LB2 = 1 ; Lockbit


; ***** FUSES ************************************************************
; LOW fuse bits



; ***** CPU REGISTER DEFINITIONS *****************************************
;.def XH = r27
;.def XL = r26
;.def YH = r29
;.def YL = r28
;.def ZH = r31
;.def ZL = r30



; ***** DATA MEMORY DECLARATIONS *****************************************
.equ FLASHEND = 0x01ff ; Note: Word address
.equ IOEND = 0x003f
.equ SRAM_SIZE = 0
.equ RAMEND = 0x0000
.equ XRAMEND = 0x0000
.equ E2END = 0x003f
.equ EEPROMEND = 0x003f
.equ EEADRBITS = 6
#pragma AVRPART MEMORY PROG_FLASH 1024
#pragma AVRPART MEMORY EEPROM 64
#pragma AVRPART MEMORY INT_SRAM SIZE 0
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x0





; ***** INTERRUPT VECTORS ************************************************
.equ INT0addr = 0x0001 ; External Interrupt 0
.equ OVF0addr = 0x0002 ; Timer/Counter0 Overflow
.equ ACIaddr = 0x0003 ; Analog Comparator

.equ INT_VECTORS_SIZE = 4 ; size in words

#pragma AVRPART CORE INSTRUCTIONS_NOT_SUPPORTED break

#endif /* _1200DEF_INC_ */

; ***** END OF FILE ******************************************************


.def number = r10

.def ind_l = r11

.def ind_m = r12

.def ind_h = r13

.def if_l = r14

.def if_h = r15

.def fl_l = r16

.def fl_h =r17

.def work_l =r18

.def work_h =r19

.def temp =r20

.def temp1 =r21

.def loop = r22

.def flagtx =r23

.def glob = r24

.def mult_l = r25

.def mult_h = r26

.def fm_h = r27

.def fm_l = r28

.def temp16_l = r29

.def temp16_h = r30

.def dat_s= r31


;PORTb

.equ DN =0

.equ UP =1

.equ SCAN=2

.equ MEM1=3

.equ MEM2=4

.equ MEM3=5

.equ SAVE=6


;PORTd

.equ TX =0

.equ SQL =1

.equ DATA =2

.equ CL =3

.equ CE =4

.equ SK = 5

.equ DI = 6



.cseg

.org 0


000000 ef4f ldi temp, 0xFF

000001 bb48 out PORTB,temp ;порт B на ввод

000002 2744 clr temp

000003 bb47 out DDRB,temp

000004 e843 ldi temp, 0b10000011

000005 bb42 out PORTD, temp

000006 e74c ldi temp,0B01111100

000007 bb41 out DDRD,temp ;порт D на выход, кроме двух крайних разрядов SQL, TX

000008 24aa clr number

000009 2777 clr flagtx

00000a e540 ldi temp, 0x50

00000b d1d7 rcall pause_ro


;**************************

;**************************

00000c e040 ldi temp, fmin ;загружаем из памяти минимальную границу

00000d d1cf rcall EERead

00000e 2f14 mov fl_h, temp

00000f e041 ldi temp, fmin + 1

000010 d1cc rcall EERead

000011 2f04 mov fl_l, temp

000012 e042 ldi temp, fmax; загружаем максимальную границу

000013 d1c9 rcall EERead

000014 2fb4 mov fm_h, temp

000015 e043 ldi temp, fmax + 1

000016 d1c6 rcall EERead

000017 2fc4 mov fm_l, temp

000018 e044 ldi temp, if_freq;загружаем частоту ПЧ

000019 d1c3 rcall EERead

00001a 2ef4 mov if_h, temp

00001b e045 ldi temp, if_freq + 1

00001c d1c0 rcall EERead

00001d 2ee4 mov if_l, temp

00001e e046 ldi temp,ch1 ; загружаем значение из первой ячейки памяти в рабочую

00001f d1bd rcall EERead

000020 2f34 mov work_h, temp

000021 e047 ldi temp, ch1 +1

000022 d1ba rcall EERead

000023 2f24 mov work_l, temp



;***********************

;ручной ввод параметров

;***********************

000024 9bb3 sbis PINB,MEM1

000025 c005 rjmp vvodmin


000026 9bb4 sbis PINB,MEM2

000027 c00e rjmp vvodmax


000028 9bb5 sbis PINB,MEM3

000029 c017 rjmp vvodif

00002a c076 rjmp initial


00002b 9bb3 vvodmin:sbis PINB,MEM1

00002c cffe rjmp vvodmin

00002d 2f20 mov work_l, fl_l

00002e 2f31 mov work_h, fl_h

00002f ea00 ldi fl_l, 0xA0 ;минимальное значение частоты - 20 мГц

000030 e01f ldi fl_h, 0x0F

000031 e3c3 ldi fm_l, 0x33 ;максимальное - 65535 кГц

000032 e3b3 ldi fm_h, 0x33

000033 e041 ldi temp, 0x01

000034 2ea4 mov number, temp

000035 c015 rjmp vision



000036 9bb4 vvodmax:sbis PINB,MEM2

000037 cffe rjmp vvodmax

000038 2f2c mov work_l, fm_l

000039 2f3b mov work_h, fm_h

00003a ea00 ldi fl_l, 0xA0

00003b e01f ldi fl_h, 0x0F

00003c e3c3 ldi fm_l, 0x33

00003d e3b3 ldi fm_h, 0x33

00003e e042 ldi temp, 0x02

00003f 2ea4 mov number, temp

000040 c00a rjmp vision



000041 9bb5 vvodif:sbis PINB,MEM3

000042 cffe rjmp vvodif

000043 2d2e mov work_l, if_l

000044 2d3f mov work_h, if_h

000045 e500 ldi fl_l, 0x50; минимальное значение частоты - 400 кГц

000046 2711 clr fl_h

000047 e3c0 ldi fm_l, 0x30; максимальное значение - 22000 кГц

000048 e1b1 ldi fm_h, 0x11

000049 e043 ldi temp, 0x03

00004a 2ea4 mov number, temp





00004b d114 vision:rcall display




00004c e042 askkeys:ldi temp, 0x02

00004d d195 rcall pause_ro


00004e 9bb1 sbis PINB,UP

00004f c009 rjmp up_rout1


000050 9bb0 sbis PINB,DN

000051 c015 rjmp dn_rout1


000052 9bb3 sbis PINB,MEM1

000053 c020 rjmp savemin


000054 9bb4 sbis PINB,MEM2

000055 c02d rjmp savemax


000056 9bb5 sbis PINB,MEM3

000057 c03a rjmp saveif

000058 cff3 rjmp askkeys



000059 9bb1 up_rout1:sbis PINB,UP

00005a cffe rjmp up_rout1

00005b e041 ldi temp, 0x01

00005c 9488 clc

00005d 0f24 add work_l, temp ; увеличить на 1 значение в рабочей ячейке

00005e 2744 clr temp

00005f 1f34 adc work_h, temp ; если был перенос, увеличиваем на 1 старший разряд

000060 17b3 cp fm_h, work_h; достгло ло значение старшего разряда макс?

000061 f749 brne vision; нет-выход

000062 172c cp work_l, fm_l; если да, проверяем младший разряд

000063 f338 brlo vision

000064 2f31 mov work_h, fl_h; дошло до конца - загружаем рабочую ячейку мин.

000065 2f20 mov work_l, fl_l; значением

000066 cfe4 rjmp vision


000067 9bb0 dn_rout1:sbis PINB,DN ; ждём отпускания кнопки

000068 cffe rjmp dn_rout1

000069 2744 clr temp

00006a 9488 clc

00006b 5021 subi work_l, 0x01;уменьшаем на 1 младший байт

00006c 0b34 sbc work_h, temp ; если был перенос, уменьшаем старший байт

00006d 1731 cp work_h, fl_h; дошло до конца?

00006e f6e1 brne vision; нет

00006f 1702 cp fl_l, work_l ; дошло до конца?

000070 f2d0 brlo vision; нет

000071 2f3b mov work_h, fm_h;если дошло, переписываем в рабочую ячейку

000072 2f2c mov work_l, fm_l;максимальное значение

000073 cfd7 rjmp vision



000074 99b3 savemin:sbic PINB, MEM1 ;если кнопку ещё удерживают,

000075 cfd5 rjmp vision

000076 99b6 sbic PINB, SAVE ;проверяем, нажата ли РЕП

000077 cffc rjmp savemin ; если РЕП отпущена, возврат

000078 9bb6 neotp1:sbis PINB, SAVE ; ждём, пока отпустят РЕП

000079 cffe rjmp neotp1

00007a e040 ldi temp, fmin ; записываем в память данные

00007b 2f53 mov temp1, work_h

00007c d15a rcall EEwrite

00007d e041 ldi temp, fmin+1

00007e 2f52 mov temp1, work_l

00007f d157 rcall EEwrite

000080 9bb3 vozv_1:sbis PINB, MEM1 ; когда отпущена МЕМ1, выход

000081 cffe rjmp vozv_1

000082 cfc8 rjmp vision




000083 99b4 savemax:sbic PINB, MEM2 ;если кнопку ещё удерживают,

000084 cfc6 rjmp vision

000085 99b6 sbic PINB, SAVE ;проверяем, нажата ли РЕП

000086 cffc rjmp savemax ; если РЕП отпущена, возврат

000087 9bb6 neotp2:sbis PINB, SAVE ; ждём, пока отпустят РЕП

000088 cffe rjmp neotp2

000089 e042 ldi temp, fmax ; записываем в память данные

00008a 2f53 mov temp1, work_h

00008b d14b rcall EEwrite

00008c e043 ldi temp, fmax+1

00008d 2f52 mov temp1, work_l

00008e d148 rcall EEwrite

00008f 9bb4 vozv_2:sbis PINB, MEM2 ; когда отпущена МЕМ1, выход

000090 cffe rjmp vozv_2

000091 cfb9 rjmp vision



000092 99b5 saveif:sbic PINB, MEM3 ;если кнопку ещё удерживают,

000093 cfb7 rjmp vision

000094 99b6 sbic PINB, SAVE ;проверяем, нажата ли РЕП

000095 cfed rjmp savemax ; если РЕП отпущена, возврат

000096 9bb6 neotp3:sbis PINB, SAVE ; ждём, пока отпустят РЕП

000097 cffe rjmp neotp3

000098 e044 ldi temp, if_freq ; записываем в память данные

000099 2f53 mov temp1, work_h

00009a d13c rcall EEwrite

00009b e045 ldi temp, if_freq+1

00009c 2f52 mov temp1, work_l

00009d d139 rcall EEwrite

00009e 9bb5 vozv_3:sbis PINB, MEM3 ; когда отпущена МЕМ1, выход

00009f cffe rjmp vozv_3

0000a0 cfaa rjmp vision




initial:

0000a1 d0be rcall display

0000a2 d0f6 rcall syntez

;***Опрос клавиш**********************

0000a3 e042 bigloop:ldi temp, 0x02

0000a4 d13e rcall pause_ro


0000a5 9bb1 sbis PINB,UP

0000a6 c00d rjmp up_rout


0000a7 9bb0 sbis PINB,DN

0000a8 c01a rjmp dn_rout


0000a9 9b80 sbis PIND,TX

0000aa c025 rjmp tx_rout


0000ab 9bb2 sbis PINB,SCAN

0000ac c02d rjmp scan_rout



0000ad 9bb3 sbis PINB,MEM1

0000ae c06f rjmp mem1_r


0000af 9bb4 sbis PINB,MEM2

0000b0 c083 rjmp mem2_r


0000b1 9bb5 sbis PINB,MEM3

0000b2 c097 rjmp mem3_r



0000b3 cfef rjmp bigloop


;***Обработка опроса клавиш ************************


0000b4 9bb1 up_rout:sbis PINB,UP

0000b5 cffe rjmp up_rout

0000b6 2744 clr temp

0000b7 9488 clc

0000b8 e041 ldi temp, 0x01

0000b9 0f24 add work_l, temp ; увеличить на 1 значение в рабочей ячейке

0000ba 2744 clr temp

0000bb 1f34 adc work_h, temp ; если был перенос, увеличиваем на 1 старший разряд

0000bc 17b3 cp fm_h, work_h; достгло ло значение старшего разряда макс?

0000bd f719 brne initial; нет-выход

0000be 172c cp work_l, fm_l ; если да, проверяем младший разряд

0000bf f308 brlo initial

0000c0 2f31 mov work_h, fl_h; дошло до конца - загружаем рабочую ячейку мин.

0000c1 2f20 mov work_l, fl_l; значением

0000c2 cfde rjmp initial



0000c3 9bb0 dn_rout:sbis PINB,DN ; ждём отпускания кнопки

0000c4 cffe rjmp dn_rout

0000c5 2744 clr temp

0000c6 9488 clc

0000c7 5021 subi work_l, 0x01;уменьшаем на 1 младший байт

0000c8 0b34 sbc work_h, temp ; если был перенос, уменьшаем старший байт

0000c9 1731 cp work_h, fl_h ; дошло до конца?

0000ca f6b1 brne initial; нет

0000cb 1702 cp fl_l, work_l ; дошло до конца?

0000cc f2a0 brlo initial; нет

0000cd 2f3b mov work_h, fm_h;если дошло, переписываем в рабочую ячейку

0000ce 2f2c mov work_l, fm_l;максимальное значение

0000cf cfd1 rjmp initial




0000d0 e071 tx_rout:ldi flagtx,0x01 ;устанавливаем флаг передачи в 1

0000d1 e04b ldi temp, 0x0B

0000d2 2ea4 mov number, temp

0000d3 d08c rcall display

0000d4 d0c4 rcall syntez ;выдаём в синтезатор

0000d5 9b80 return: sbis PIND,TX ;ждём, пока отпустят кнопку

0000d6 cffe rjmp return

0000d7 2777 clr flagtx ;если кнопка отпущена, сбрасываем флаг

0000d8 24aa clr number

0000d9 cfc7 rjmp initial





scan_rout:

0000da 9bb2 sbis PINB,SCAN ;ждём, пока отпустят кнопку

0000db cffe rjmp scan_rout

0000dc 9488 scan_up:clc

0000dd e041 ldi temp,0x01

0000de 0f24 add work_l, temp ;увеличиваем

0000df 2744 clr temp

0000e0 1f34 adc work_h, temp ; если был перенос, увеличиваем на 1 старший разряд

0000e1 17b3 cp fm_h, work_h; достгло ло значение старшего разряда макс?

0000e2 f429 brne end3; нет-выход

0000e3 172c cp work_l, fm_l; если да, проверяем младший разряд

0000e4 f018 brlo end3

0000e5 2f31 mov work_h, fl_h; дошло до конца - загружаем рабочую ячейку мин.

0000e6 2f20 mov work_l, fl_l; значением

0000e7 f401 brne end3


0000e8 d077 end3:rcall display

0000e9 d0af rcall syntez

0000ea e044 ldi temp,0x04 ;задержка , определяет скорость сканирования

0000eb d0f7 rcall pause_ro






0000ec 99b2 nachopr:sbic PINB, SCAN ;если нажата SCAN, TX, UP, DN - выход из режима сканирования

0000ed c003 rjmp key1

0000ee 9bb2 voz1:sbis PINB, SCAN

0000ef cffe rjmp voz1

0000f0 cfb2 rjmp bigloop

0000f1 9980 key1:sbic PIND, TX

0000f2 c003 rjmp key2

0000f3 9b80 voz2:sbis PIND, TX

0000f4 cffe rjmp voz2

0000f5 cfad rjmp bigloop

0000f6 99b1 key2:sbic PINB, UP

0000f7 c003 rjmp key3

0000f8 9bb1 voz3:sbis PINB, UP

0000f9 cffe rjmp voz3

0000fa cfa8 rjmp bigloop

0000fb 99b0 key3:sbic PINB, DN

0000fc c003 rjmp key4

0000fd 9bb0 voz4:sbis PINB, DN

0000fe cffe rjmp voz4

0000ff cfa3 rjmp bigloop

000100 9981 key4:sbic PIND, SQL ;если не нажата ни одна кнопка,

000101 cfda rjmp scan_up ; продолжаем сканирование



000102 e480 ldi glob,0x40 ;подпрограмма обработки, если нажата SQL, ГЛОБ - задержка

000103 99b2 oprotp:sbic PINB, SCAN ; если нажата SCAN, TX, UP, DN - выход из режима сканирования

000104 c003 rjmp key11

000105 9bb2 voz11:sbis PINB, SCAN

000106 cffe rjmp voz11

000107 cf9b rjmp bigloop

000108 9980 key11:sbic PIND, TX

000109 c003 rjmp key21

00010a 9b80 voz21:sbis PIND, TX

00010b cffe rjmp voz21

00010c cf96 rjmp bigloop

00010d 99b1 key21:sbic PINB, UP

00010e c003 rjmp key31

00010f 9bb1 voz31:sbis PINB, UP

000110 cffe rjmp voz31

000111 cf91 rjmp bigloop

000112 99b0 key31:sbic PINB, DN

000113 c003 rjmp key41

000114 9bb0 voz41:sbis PINB, DN

000115 cffe rjmp voz41

000116 cf8c rjmp bigloop

000117 9b81 key41:sbis PIND, SQL ; если SQL всё ещё нажата,

000118 cfea rjmp oprotp ; ждём, пока что-нибудь нажмётся

000119 e044 ldi temp,0x04 ; если SQL отпущена, формируем паузу в сканировании

00011a d0c8 rcall pause_ro

00011b 958a dec glob ; пауза, пока не сбросится ГЛОБ

00011c f731 brne oprotp

00011d cfbe rjmp scan_up ; продолжаем сканирование

;*****************************

;работа с ячейками памяти

;****************************



00011e 99b3 mem1_r:sbic PINB, MEM1 ;если кнопку ещё удерживают,

00011f c00d rjmp readm1

000120 99b6 sbic PINB, SAVE ;проверяем, нажата ли SAVE

000121 cffc rjmp mem1_r ; если РЕП отпущена, возврат

000122 9bb6 neotpus1:sbis PINB, SAVE ; ждём, пока отпустят SAVE

000123 cffe rjmp neotpus1

000124 e046 ldi temp, ch1 ; записываем в память данные

000125 2f53 mov temp1, work_h

000126 d0b0 rcall EEwrite

000127 e047 ldi temp, ch1+1

000128 2f52 mov temp1, work_l

000129 d0ad rcall EEwrite

00012a 9bb3 vozv1:sbis PINB, MEM1 ; когда отпущена МЕМ1, выход

00012b cffe rjmp vozv1

00012c cf76 rjmp bigloop

00012d e046 readm1:ldi temp,ch1 ;чтение данных из памяти

00012e d0ae rcall EEread

00012f 2f34 mov work_h, temp

000130 e047 ldi temp, ch1+1

000131 d0ab rcall EEread

000132 2f24 mov work_l, temp

000133 cf6d rjmp initial


000134 99b4 mem2_r:sbic PINB, MEM2

000135 c00d rjmp readm2

000136 99b6 sbic PINB, SAVE

000137 cffc rjmp mem2_r

000138 9bb6 neotpus2:sbis PINB, SAVE

000139 cffe rjmp neotpus2

00013a e048 ldi temp, ch2

00013b 2f53 mov temp1, work_h

00013c d09a rcall EEwrite

00013d e049 ldi temp, ch2+1

00013e 2f52 mov temp1, work_l

00013f d097 rcall EEwrite

000140 9bb4 vozv2:sbis PINB, MEM2

000141 cffe rjmp vozv2

000142 cf60 rjmp bigloop

000143 e048 readm2:ldi temp,ch2

000144 d098 rcall EEread

000145 2f34 mov work_h, temp

000146 e049 ldi temp, ch2+1

000147 d095 rcall EEread

000148 2f24 mov work_l, temp

000149 cf57 rjmp initial



00014a 99b5 mem3_r:sbic PINB, MEM3

00014b c00d rjmp readm3

00014c 99b6 sbic PINB, SAVE

00014d cffc rjmp mem3_r

00014e 9bb6 neotpus3:sbis PINB, SAVE

00014f cffe rjmp neotpus3

000150 e04a ldi temp, ch3

000151 2f53 mov temp1, work_h

000152 d084 rcall EEwrite

000153 e04b ldi temp, ch3+1

000154 2f52 mov temp1, work_l

000155 d081 rcall EEwrite

000156 9bb5 vozv3:sbis PINB, MEM3

000157 cffe rjmp vozv3

000158 cf4a rjmp bigloop

000159 e04a readm3:ldi temp,ch3

00015a d082 rcall EEread

00015b 2f34 mov work_h, temp

00015c e04b ldi temp, ch3+1

00015d d07f rcall EEread

00015e 2f24 mov work_l, temp

00015f cf41 rjmp initial



;******отображение на дисплее******************



;************ преобразование коэфф.деления в частоту для вывода на индикатор**************

000160 2799 display:clr mult_l

000161 27aa clr mult_h

000162 e045 ldi temp, 0x05

000163 0f92 cycle:add mult_l, work_l

000164 1fa3 adc mult_h, work_h

000165 954a dec temp

000166 f7e1 brne cycle

000167 e1d0 ldi temp16_l, 0x10 ;определяем количество десятков тысяч

000168 e2e7 ldi temp16_h, 0x27

000169 d08e rcall decdig

00016a 3040 cpi temp, 0x00

00016b f409 brne nextdig1

00016c e04a ldi temp, 0x0A

00016d 2ed4 nextdig1:mov ind_h, temp

00016e eed8 ldi temp16_l, 0xE8 ;определяем количество тысяч

00016f e0e3 ldi temp16_h, 0x03

000170 d087 rcall decdig

000171 3040 cpi temp, 0x00

000172 f409 brne nextdig2

000173 e04a ldi temp, 0x0A

000174 2ec4 nextdig2:mov ind_m, temp

000175 94c2 swap ind_m

000176 e6d4 ldi temp16_l, 0x64 ;определяем количество сотен

000177 27ee clr temp16_h

000178 d07f rcall decdig

000179 3040 cpi temp, 0x00

00017a f409 brne nextdig3

00017b e04a ldi temp, 0x0A

00017c 0ec4 nextdig3:add ind_m, temp

00017d e0da ldi temp16_l, 0x0A; определяемколичество десятков

00017e 27ee clr temp16_h

00017f d078 rcall decdig

000180 3040 cpi temp, 0x00

000181 f409 brne nextdig4

000182 e04a ldi temp, 0x0A

000183 2eb4 nextdig4:mov ind_l, temp ; в конце операции в ячейках инд содержится

000184 94b2 swap ind_l;десятичное значение рабочей частоты

;mov temp,mult_l

000185 3090 cpi mult_l,0x00;нули заменены на А - для вывода на индикатор.

000186 f409 brne enddig

000187 e09a ldi mult_l,0x0A

000188 0eb9 enddig:add ind_l, mult_l





000189 2d4a mov temp, number

00018a d03a no_tx:rcall vyvdig

00018b d039 rcall vyvdig

00018c 2744 clr temp

00018d d037 rcall vyvdig

00018e d036 rcall vyvdig

00018f 2d4d mov temp, ind_h

000190 d034 rcall vyvdig

000191 d033 rcall vyvdig

000192 2d4c mov temp, ind_m

000193 d031 rcall vyvdig

000194 d030 rcall vyvdig

000195 2d4b mov temp, ind_l

000196 d02e rcall vyvdig

000197 d02d rcall vyvdig

000198 9508 ret



;*****ВВод информации в синтезатор******************

syntez: ;ret ;технологический возврат

000199 2f92 mov mult_l, work_l ; в противном случае прибавляем

00019a 2fa3 mov mult_h, work_h

00019b 3070 cpi flagtx,0x00

00019c f421 brne nosum ;если установлен флаг, не прибавляем ПЧ

00019d eef4 ldi dat_s,0b11100100;0xA4

00019e 0d9e add mult_l,if_l ;добавляем ПЧ, если надо

00019f 1daf adc mult_h,if_h

0001a0 c001 rjmp sum

0001a1 eef2 nosum:ldi dat_s,0b11100010;0xA2

0001a2 9892 sum:cbi PORTD,DATA

0001a3 9a94 sbi PORTD,CE ;разрешение записи

0001a4 e068 ldi loop, 0x08

0001a5 2f49 mov temp,mult_l

0001a6 9547 loop2:ror temp

0001a7 f010 brcs h_l

0001a8 9892 cbi PORTD, DATA

0001a9 c001 rjmp sync

0001aa 9a92 h_l:sbi PORTD, DATA

0001ab d040 sync:rcall pulse

0001ac 956a dec loop

0001ad f7c1 brne loop2





0001ae e068 ldi loop, 0x08

0001af 2f4a mov temp, mult_h

0001b0 9547 loop3:ror temp

0001b1 f010 brcs h_l1

0001b2 9892 cbi PORTD, DATA

0001b3 c001 rjmp sync1

0001b4 9a92 h_l1:sbi PORTD, DATA

0001b5 d036 sync1:rcall pulse

0001b6 956a dec loop

0001b7 f7c1 brne loop3






0001b8 e068 ldi loop, 0x08

0001b9 2f4f mov temp, dat_s

0001ba 9547 loop21:ror temp

0001bb f010 brcs h_l2

0001bc 9892 cbi PORTD, DATA

0001bd c001 rjmp sync2

0001be 9a92 h_l2:sbi PORTD, DATA

0001bf d02c sync2:rcall pulse

0001c0 956a dec loop

0001c1 f7c1 brne loop21

0001c2 9892 cbi PORTD, DATA ;CE

0001c3 9894 cbi PORTD, CE

0001c4 9508 ret







;***вывод цифры на индикатор***

vyvdig: ; ret ;технологический возврат

0001c5 e064 ldi loop,0x04

0001c6 1f44 byte_c:rol temp

0001c7 f010 brcs h_level

0001c8 9896 cbi PORTD,DI

0001c9 c001 rjmp synhro

0001ca 9a96 h_level:sbi PORTD,DI

0001cb 9a95 synhro:sbi PORTD,SK

0001cc e150 ldi temp1, 0x10;

0001cd d027 rcall zaderzh

0001ce 9895 cbi PORTD,SK

0001cf e250 ldi temp1, 0x20

0001d0 d024 rcall zaderzh

0001d1 956a dec loop

0001d2 f799 brne byte_c

0001d3 e450 ldi temp1, 0x40

0001d4 d020 rcall zaderzh

0001d5 9896 cbi PORTD, DI ;SK

0001d6 9508 ret

;*************************

; Запись в ЕЕПРОМ

;**************************

0001d7 99e1 EEwrite: sbic EECR, EEWE

0001d8 cffe rjmp EEwrite

0001d9 bb4e out EEAR, temp

0001da bb5d out EEDR, temp1

0001db 9ae1 sbi EECR, EEWE

0001dc 9508 ret

;***********************

; Чтение из памяти

;***********************

0001dd 99e1 EEread: sbic EECR,EEWE

0001de cffe rjmp EERead

0001df bb4e out EEAR,temp

0001e0 9ae0 sbi EECR,EERE

0001e1 b34d in temp,EEDR

0001e2 9508 ret

;*********************

; пауза

;*********************

pause_ro: ; ret ;технологический возврат

0001e3 ef5f ldi temp1, 0xFF

0001e4 ef6f retu1:ldi loop, 0xFF

0001e5 956a retu2:dec loop

0001e6 f7f1 brne retu2

0001e7 955a dec temp1

0001e8 f7d9 brne retu1

0001e9 954a dec temp

0001ea f7c1 brne pause_ro

0001eb 9508 ret

;*********************

; синхроимпульс

;*********************

0001ec 9a93 pulse:sbi PORTD, CL

0001ed e15f ldi temp1,0x1F

0001ee 955a zad1:dec temp1

0001ef f7f1 brne zad1

0001f0 9893 cbi PORTD, CL

0001f1 e15f ldi temp1,0x1F

0001f2 955a zad2:dec temp1

0001f3 f7f1 brne zad2

0001f4 9508 ret



zaderzh:;ret ;технологический возврат

0001f5 955a dec temp1

0001f6 f7f1 brne zaderzh

0001f7 9508 ret

;**********************************************

;подпрограмма пересчёта НЕХ- десятичное число

;**********************************************

0001f8 ef4f decdig:ldi temp,-1

0001f9 1b9d minus:sub mult_l, temp16_l

0001fa 0bae sbc mult_h, temp16_h

0001fb 9543 inc temp

0001fc f7e0 brsh minus

0001fd 0f9d add mult_l, temp16_l

0001fe 1fae adc mult_h, temp16_h

0001ff 9508 ret




.eseg

.org 0


fmin:

000000 2c
000001 88 .db 0x2C, 0x88 ;0x0F, 0xA0 ;20000/5=4000

fmax:

000002 2c
000003 ec .db 0x2c, 0xEC ;0x33, 0x33 ;65535/5=13107

if_freq:

000004 08
000005 5c .db 0x08, 0x5C ;10700/5=2140

ch1:

000006 2c
000007 88 .db 0x2C, 0x88

ch2:

000008 2c
000009 88 .db 0x2C, 0x88

ch3:

00000a 2c
00000b 88 .db 0x2C, 0x88

;ch4:

;.db 0x33, 0x32


00000c 73
00000d 74
00000e 65
00000f 70
000010 35 .db "step5"




RESOURCE USE INFORMATION
------------------------

Notice:
The register and instruction counts are symbol table hit counts,
and hence implicitly used resources are not counted, eg, the
'lpm' instruction without operands implicitly uses r0 and z,
none of which are counted.

x,y,z are separate entities in the symbol table and are
counted separately from r26..r31 here.

.dseg memory usage only counts static data declared with .byte

AT90S1200 register use summary:
r0 : 0 r1 : 0 r2 : 0 r3 : 0 r4 : 0 r5 : 0 r6 : 0 r7 : 0
r8 : 0 r9 : 0 r10: 7 r11: 4 r12: 4 r13: 2 r14: 3 r15: 3
r16: 10 r17: 10 r18: 30 r19: 30 r20: 110 r21: 23 r22: 10 r23: 4
r24: 2 r25: 10 r26: 7 r27: 10 r28: 10 r29: 6 r30: 6 r31: 3
x : 0 y : 0 z : 0
Registers used: 22 out of 35 (62.9%)

AT90S1200 instruction use summary:
adc : 6 add : 8 and : 0 andi : 0 asr : 0 bclr : 0
bld : 0 brbc : 0 brbs : 0 brcc : 0 brcs : 4 breq : 0
brge : 0 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 5
brlt : 0 brmi : 0 brne : 24 brpl : 0 brsh : 1 brtc : 0
brts : 0 brvc : 0 brvs : 0 bset : 0 bst : 0 cbi : 10
cbr : 0 clc : 5 clh : 0 cli : 0 cln : 0 clr : 17
cls : 0 clt : 0 clv : 0 clz : 0 com : 0 cp : 10
cpc : 0 cpi : 6 cpse : 0 dec : 12 eor : 0 in : 1
inc : 1 ld : 0 ldi : 80 lsl : 0 lsr : 0 mov : 58
neg : 0 nop : 0 or : 0 ori : 0 out : 7 rcall : 58
ret : 9 reti : 0 rjmp : 101 rol : 1 ror : 3 sbc : 3
sbci : 0 sbi : 9 sbic : 23 sbis : 45 sbr : 0 sbrc : 0
sbrs : 0 sec : 0 seh : 0 sei : 0 sen : 0 ser : 0
ses : 0 set : 0 sev : 0 sez : 0 sleep : 0 st : 0
sub : 1 subi : 2 swap : 2 tst : 0 wdr : 0
Instructions used: 29 out of 89 (32.6%)

AT90S1200 memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x000400 1024 0 1024 1024 100.0%
[.dseg] 0x000000 0x000060 0 0 0 0 -
[.eseg] 0x000000 0x000011 0 17 17 64 26.6%

Assembly complete, 0 errors, 0 warnings



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 63:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru