📄 init.lis
字号:
.area vector(rom, abs)
.org 44
002C 0C943400 jmp _uart0_rx_isr
.area text(rom, con, rel)
0068 .dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\init.c
0068 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
0068 ; status -> R16
.even
0068 _uart0_rx_isr::
0068 2A92 st -y,R2
006A 0A93 st -y,R16
006C 8A93 st -y,R24
006E 9A93 st -y,R25
0070 EA93 st -y,R30
0072 FA93 st -y,R31
0074 2FB6 in R2,0x3f
0076 2A92 st -y,R2
0078 .dbline -1
0078 .dbline 75
0078 ;
0078 ; #pragma interrupt_handler uart0_rx_isr:12
0078 ; void uart0_rx_isr(void)
0078 ; {
0078 .dbline 79
0078 ; uint8 status;
0078 ;
0078 ; //uart has received a character in UDR
0078 ; status = UCSRA;
0078 0BB1 in R16,0xb
007A .dbline 80
007A ; receBuf[receCount] = UDR;
007A 80E0 ldi R24,<_receBuf
007C 90E0 ldi R25,>_receBuf
007E E0910000 lds R30,_receCount
0082 FF27 clr R31
0084 E80F add R30,R24
0086 F91F adc R31,R25
0088 2CB0 in R2,0xc
008A 2082 std z+0,R2
008C .dbline 82
008C ;
008C ; if(status & 0x1c) //通信出错
008C 802F mov R24,R16
008E 8C71 andi R24,28
0090 19F0 breq L8
0092 .dbline 83
0092 ; checkoutError = 2; //偶校验出错
0092 82E0 ldi R24,2
0094 80930000 sts _checkoutError,R24
0098 L8:
0098 .dbline 86
0098 ;
0098 ; //testRegister = status;
0098 ; receCount++; //接收地址偏移寄存器加1
0098 80910000 lds R24,_receCount
009C 8F5F subi R24,255 ; addi 1
009E 80930000 sts _receCount,R24
00A2 .dbline 87
00A2 ; receCount &= 0x1f; //最多一次只能接收32个字节
00A2 8F71 andi R24,31
00A4 80930000 sts _receCount,R24
00A8 .dbline 88
00A8 ; receTimeOut = 10; //通讯超时值
00A8 8AE0 ldi R24,10
00AA 80930000 sts _receTimeOut,R24
00AE .dbline -2
00AE .dbline 89
00AE ; }
00AE L7:
00AE 2990 ld R2,y+
00B0 2FBE out 0x3f,R2
00B2 F991 ld R31,y+
00B4 E991 ld R30,y+
00B6 9991 ld R25,y+
00B8 8991 ld R24,y+
00BA 0991 ld R16,y+
00BC 2990 ld R2,y+
00BE .dbline 0 ; func end
00BE 1895 reti
00C0 .dbsym r status 16 c
00C0 .dbend
.area vector(rom, abs)
.org 52
0034 0C946000 jmp _uart0_tx_isr
.area text(rom, con, rel)
00C0 .dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\init.c
00C0 .dbfunc e uart0_tx_isr _uart0_tx_isr fV
.even
00C0 _uart0_tx_isr::
00C0 2A92 st -y,R2
00C2 3A92 st -y,R3
00C4 8A93 st -y,R24
00C6 9A93 st -y,R25
00C8 EA93 st -y,R30
00CA FA93 st -y,R31
00CC 2FB6 in R2,0x3f
00CE 2A92 st -y,R2
00D0 .dbline -1
00D0 .dbline 93
00D0 ;
00D0 ; #pragma interrupt_handler uart0_tx_isr:14
00D0 ; void uart0_tx_isr(void)
00D0 ; {
00D0 .dbline 95
00D0 ; //character has been transmitted
00D0 ; if(sendPosi < sendCount)
00D0 20900000 lds R2,_sendCount
00D4 30900000 lds R3,_sendPosi
00D8 3214 cp R3,R2
00DA 70F4 brsh L11
00DC .dbline 96
00DC ; {
00DC .dbline 97
00DC ; sendPosi++;
00DC 832D mov R24,R3
00DE 8F5F subi R24,255 ; addi 1
00E0 80930000 sts _sendPosi,R24
00E4 .dbline 98
00E4 ; UDR = sendBuf[sendPosi];
00E4 80E0 ldi R24,<_sendBuf
00E6 90E0 ldi R25,>_sendBuf
00E8 E0910000 lds R30,_sendPosi
00EC FF27 clr R31
00EE E80F add R30,R24
00F0 F91F adc R31,R25
00F2 2080 ldd R2,z+0
00F4 2CB8 out 0xc,R2
00F6 .dbline 99
00F6 ; }
00F6 06C0 xjmp L12
00F8 L11:
00F8 .dbline 101
00F8 .dbline 102
00F8 C798 cbi 0x18,7
00FA .dbline 103
00FA 2224 clr R2
00FC 20920000 sts _receCount,R2
0100 .dbline 104
0100 20920000 sts _checkoutError,R2
0104 .dbline 105
0104 L12:
0104 .dbline -2
0104 .dbline 106
0104 ; else
0104 ; {
0104 ; receEnable(); //发送完后将485置于接收状态
0104 ; receCount = 0; //清接收地址偏移寄存器
0104 ; checkoutError = 0;
0104 ; }
0104 ; }
0104 L10:
0104 2990 ld R2,y+
0106 2FBE out 0x3f,R2
0108 F991 ld R31,y+
010A E991 ld R30,y+
010C 9991 ld R25,y+
010E 8991 ld R24,y+
0110 3990 ld R3,y+
0112 2990 ld R2,y+
0114 .dbline 0 ; func end
0114 1895 reti
0116 .dbend
0116 .dbfunc e init_devices _init_devices fV
.even
0116 _init_devices::
0116 .dbline -1
0116 .dbline 110
0116 ;
0116 ; //call this routine to initialise all peripherals
0116 ; void init_devices(void)
0116 ; {
0116 .dbline 112
0116 ; //stop errant interrupts until set up
0116 ; CLI(); //disable all interrupts
0116 F894 cli
0118 .dbline 113
0118 ; port_init();
0118 74DF xcall _port_init
011A .dbline 114
011A ; watchdog_init();
011A 82DF xcall _watchdog_init
011C .dbline 115
011C ; timer0_init();
011C 85DF xcall _timer0_init
011E .dbline 116
011E ; adc_init();
011E 8CDF xcall _adc_init
0120 .dbline 117
0120 ; uart0_init();
0120 97DF xcall _uart0_init
0122 .dbline 119
0122 ;
0122 ; MCUCR = 0x00;
0122 2224 clr R2
0124 25BE out 0x35,R2
0126 .dbline 120
0126 ; GICR = 0x00;
0126 2BBE out 0x3b,R2
0128 .dbline 121
0128 ; TIMSK = 0x01; //timer interrupt sources
0128 81E0 ldi R24,1
012A 89BF out 0x39,R24
012C .dbline 122
012C ; SEI(); //re-enable interrupts
012C 7894 sei
012E .dbline -2
012E .dbline 124
012E ; //all peripherals are now initialised
012E ; }//void init_devices(void)
012E L13:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -