📄 no2.lst
字号:
.equ UDRIE =5
.equ RXEN =4
.equ TXEN =3
.equ CHR9 =2
.equ RXB8 =1
.equ TXB8 =0
.equ ACD =7
.equ ACO =5
.equ ACI =4
.equ ACIE =3
.equ ACIC =2
.equ ACIS1 =1
.equ ACIS0 =0
.equ MUX2 =2
.equ MUX1 =1
.equ MUX0 =0
.equ ADEN =7
.equ ADSC =6
.equ ADFR =5
.equ ADIF =4
.equ ADIE =3
.equ ADPS2 =2
.equ ADPS1 =1
.equ ADPS0 =0
.def XL =r26
.def XH =r27
.def YL =r28
.def YH =r29
.def ZL =r30
.def ZH =r31
.equ RAMEND =$25F ;Last On-Chip SRAM location
.equ XRAMEND =$25F
.equ E2END =$1FF
.equ FLASHEND=$FFF
.equ INT0addr=$001 ;External Interrupt0 Vector Address
.equ INT1addr=$002 ;External Interrupt1 Vector Address
.equ OC2addr =$003 ;Timer2 compare match Vector Address
.equ OVF2addr=$004 ;Timer2 overflow Vector Address
.equ ICP1addr=$005 ;Timer1 Input Capture Vector Address
.equ OC1Aaddr=$006 ;Timer1 Output Compare A Interrupt Vector Address
.equ OC1Baddr=$007 ;Timer1 Output Compare B Interrupt Vector Address
.equ OVF1addr=$008 ;Overflow1 Interrupt Vector Address
.equ OVF0addr=$009 ;Overflow0 Interrupt Vector Address
.equ SPIaddr =$00A ;SPI Interrupt Vector Address
.equ URXCaddr=$00B ;UART Receive Complete Interrupt Vector Address
.equ UDREaddr=$00C ;UART Data Register Empty Interrupt Vector Address
.equ UTXCaddr=$00D ;UART Transmit Complete Interrupt Vector Address
.equ ADCCaddr=$00E ;ADC Conversion Complete Interrupt Vector Address
.equ ERDYaddr=$00F ;EEPROM Write Complete Interrupt Vector Address
.equ ACIaddr =$010 ;Analog Comparator Interrupt Vector Address .org 0x00
.equ label=$0200
000000 c01f rjmp RESET ;
;.org 0x01 ;通用中断
;INTT0: RJMP GINT ;
;.org 0x06 ;timerl
;INTTT: RJMP TINT ;
.org 0x020 ;
RESET:
000020 e50f SYS: ldi R16,low(RAMEND) ;设置堆栈
000021 bf0d out SPL,R16
000022 e002 ldi R16,high(RAMEND)
000023 bf0e out SPH,R16
000024 e208 ldi r16,$28 ;8279写控制寄存器
000025 bb02 out portd,r16
000026 ed01 ldi r16,$d1
000027 bb08 out portb,r16
000028 9a94 sbi portd,4
000029 e340 ldi r20,0X30
00002a d0a5 rcall Delay
;wdr ;看门狗复位
;ldi R16,$0F ;0b00001111
;out WDTCR,R16 ;狗周期2048MS
00002b ef08 ldi R16,$F8 ;0B11111000
00002c bb0a out DDRA,R16 ;A口0~2输入,3~7输出
00002d 9ada sbi porta,2
00002e ef0a ldi R16,$FA ;0B11111110
00002f bb01 out DDRD,R16 ;D口0/2输入,1/3~7输出
000030 ef0f ldi R16,$FF ;0B11111111
000031 bb04 out DDRC,R16 ;C口输出
000032 bb07 out DDRB,R16 ;B口输出
000033 e805 ldi R16,$85 ;设置ADC转换,中断触发,ADC为单次模式且32M分频
000034 b906 out adcsr,R16
000035 2700 clr R16
000036 b907 out admux,R16 ;ADC 0通道
000037 9a36 sbi adcsr,6 ;启动ADC
000038 e908 ldi r16,$98 ;初始化COM
000039 b90a out ucr,r16 ;设置UART控制寄存器---UCR
00003a e109 ldi r16,25
00003b b909 out ubrr,r16 ;设置UART波特率
00003c e400 ldi r16,$40 ;INT0可用,INT1屏蔽
00003d bf0b out GIMSK,R16
00003e e003 ldi r16,$3 ;INT0上升沿触发
00003f bf05 out mcucr,r16
000040 9894 cbi portd,4
000041 e000 ldi r16,$00 ;8279键盘显示方式初始
000042 bb08 out portb,r16
000043 9a94 sbi portd,4
000044 0000 nop
000045 9894 cbi portd,4
000046 e202 ldi r16,$22 ;8279时钟分频=2
000047 bb08 out portb,r16
000048 9a94 sbi portd,4
000049 2711 clr r17
00004a 2733 clr r19 ;ADIN 4051地址计数
00004b 9936 ADC1: sbic adcsr,adsc ;转换结束跳行否则等待
00004c cffe rjmp ADC1
00004d b024 in r2,adcl ;把转换结果送r2,r3
00004e b035 in r3,adch
00004f 99ca sbic pina,2 ;读开关量
000050 e020 ldi r18,$0 ;开关量关
000051 e021 ldi r18,$1 ;开关量开
000052 3130 cpi r19,16
000053 f009 breq cl
000054 c001 rjmp cl1
000055 2733 cl: clr r19
000056 e0b1 cl1: ldi r27,$01 ;传数据到SRAM 0100 处
000057 2fa3 mov r26,r19
000058 922d st x+,r2 ;传低位数据 0100
000059 923c st x,r3 ;传高位数据 0101
00005a 9650 adiw r26,$10
00005b 932c st x,r18 ;传开关量到 0111
00005c d03a rcall display ;调用显示子程序
00005d 9533 inc r19
00005e 3018 cpi r17,8 ;比较4051地址是否到8通道相等跳转
00005f f009 breq ta
000060 c007 rjmp tb
000061 2711 ta: clr r17
000062 9938 sbic admux,0
000063 c002 rjmp t0
000064 9a38 sbi admux,0
000065 c004 rjmp addmux
000066 9838 t0: cbi admux,0
000067 c002 rjmp addmux
000068 9513 tb: inc r17
000069 c000 rjmp addmux
00006a 3010 addmux: cpi r17,0 ;确定4051地址
00006b f079 breq ina
00006c 3011 cpi r17,1
00006d f089 breq inb
00006e 3012 cpi r17,2
00006f f099 breq ini
000070 3013 cpi r17,3
000071 f0a1 breq ind
000072 3014 cpi r17,4
000073 f0a1 breq ine
000074 3015 cpi r17,5
000075 f0b1 breq inf
000076 3016 cpi r17,6
000077 f0b1 breq ing
000078 3017 cpi r17,7
000079 f0b9 breq inh
00007a cfd0 rjmp adc1
00007b 98db ina: cbi porta,3 ;4051地址通过置位清位输出
00007c 98dc cbi porta,4
00007d 98dd cbi porta,5
00007e c014 rjmp ys
00007f 9adb inb: sbi porta,3
000080 9a95 sbi portd,5
000081 9894 cbi portd,4
000082 c010 rjmp ys
000083 98db ini: cbi porta,3
000084 9adc sbi porta,4
000085 c00d rjmp ys
000086 9adb ind: sbi porta,3
000087 c00b rjmp ys
000088 98db ine: cbi porta,3
000089 98dc cbi porta,4
00008a 9add sbi porta,5
00008b c007 rjmp ys
00008c 9adb inf: sbi porta,3
00008d c005 rjmp ys
00008e 98db ing: cbi porta,3
00008f 9adc sbi porta,4
000090 c002 rjmp ys
000091 9adb inh: sbi porta,3
000092 c000 rjmp ys
ys:
000093 e546 ldi r20,0X56 ;延时1秒
000094 d03b rcall Delay
000095 9a36 sbi adcsr,6 ;启动ADC
000096 cfb4 rjmp adc1 ;
display:
000097 9a95 sbi portd,5
000098 9894 cbi portd,4
000099 e970 ldi r23,$90
00009a bb78 out portb,r23
00009b 9a94 sbi portd,4
00009c 9895 cbi portd,5
00009d e0f4 ldi zh,high(label*2)
00009e 2fe3 mov zl,r19
00009f 95c8 lpm
0000a0 9894 cbi portd,4
0000a1 ba08 out portb,r0
0000a2 9a94 sbi portd,4
0000a3 e0f4 ldi zh,high(label*2)
0000a4 2d03 mov r16,r3
0000a5 9502 swap r16
0000a6 d008 rcall outpd1
0000a7 2d03 mov r16,r3
0000a8 d00e rcall outpd2
0000a9 2d02 mov r16,r2
0000aa 9502 swap r16
0000ab d013 rcall outpd3
0000ac 2d02 mov r16,r2
0000ad d019 rcall outpd4
0000ae 9508 ret
0000af 700f outpd1: andi r16,$0f
0000b0 e0e0 ldi zl,low(label*2)
0000b1 0fe0 add zl,r16
0000b2 95c8 lpm
0000b3 9894 cbi portd,4
0000b4 ba08 out portb,r0
0000b5 9a94 sbi portd,4
0000b6 9508 ret
0000b7 700f outpd2: andi r16,$0f
0000b8 e0e0 ldi zl,low(label*2)
0000b9 0fe0 add zl,r16
0000ba 95c8 lpm
0000bb 9894 cbi portd,4
0000bc ba08 out portb,r0
0000bd 9a94 sbi portd,4
0000be 9508 ret
0000bf 700f outpd3: andi r16,$0f
0000c0 e0e0 ldi zl,low(label*2)
0000c1 0fe0 add zl,r16
0000c2 95c8 lpm
0000c3 9894 cbi portd,4
0000c4 ba08 out portb,r0
0000c5 9a94 sbi portd,4
0000c6 9508 ret
0000c7 700f outpd4: andi r16,$0f
0000c8 e0e0 ldi zl,low(label*2)
0000c9 0fe0 add zl,r16
0000ca 95c8 lpm
0000cb 9894 cbi portd,4
0000cc ba08 out portb,r0
0000cd 9a94 sbi portd,4
0000ce 9a95 sbi portd,5
0000cf 9508 ret
0000d0 934f delay: push r20 ;2t延时子程序
0000d1 934f l0: push r20 ;2t
0000d2 934f l1: push r20 ;2t
0000d3 934f l2: push r20 ;2t
0000d4 954a l3: dec r20 ;1t
0000d5 f7f1 brne l3 ;1t/2t
0000d6 914f pop r20 ;2t
0000d7 954a dec r20 ;1t
0000d8 f7d1 brne l2 ;1t/2t
0000d9 914f pop r20 ;2t
0000da 954a dec r20 ;1t
0000db f7b1 brne l1 ;1t/2t
0000dc 914f pop r20 ;2t
0000dd 954a dec r20 ;1t
0000de f791 brne l0 ;1T/2T
0000df 914f pop r20 ;2t
0000e0 9508 ret ;4t
.cseg
.org $0200
.dw 0x063f,0x4f5b,0x6d66,0x077d
000200 063f
000201 4f5b
000202 6d66
000203 077d
.dw 0x6f7f,0x7c77,0x5e39,0x7179
000204 6f7f
000205 7c77
000206 5e39
000207 7179
Assembly complete with no errors.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -