📄 usart_m8.lis
字号:
.module usart_m8.c
.area data(ram, con, rel)
0000 _Write_Error::
0000 .blkb 2
.area idata
0000 7877 .byte 'x,'w
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 3430 .byte 52,48
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 7800 .byte 'x,0
.area data(ram, con, rel)
0006 .dbfile H:\程序库\usart_m8.c
0006 .dbsym e Write_Error _Write_Error A[6:6]c
0006 _Read_Error::
0006 .blkb 2
.area idata
0006 7877 .byte 'x,'w
.area data(ram, con, rel)
0008 .dbfile H:\程序库\usart_m8.c
0008 .blkb 2
.area idata
0008 3830 .byte 56,48
.area data(ram, con, rel)
000A .dbfile H:\程序库\usart_m8.c
000A .blkb 2
.area idata
000A 7800 .byte 'x,0
.area data(ram, con, rel)
000C .dbfile H:\程序库\usart_m8.c
000C .dbsym e Read_Error _Read_Error A[6:6]c
000C _aa::
000C .blkb 2
.area idata
000C 6F70 .byte 'o,'p
.area data(ram, con, rel)
000E .dbfile H:\程序库\usart_m8.c
000E .blkb 3
.area idata
000E 000000 .byte 0,0,0
.area data(ram, con, rel)
0011 .dbfile H:\程序库\usart_m8.c
0011 .dbsym e aa _aa A[5:5]c
.area vector(rom, abs)
.org 22
0016 00C0 rjmp _uart0_rx_isr
.area data(ram, con, rel)
0011 .dbfile H:\程序库\usart_m8.c
.area text(rom, con, rel)
0000 .dbfile H:\程序库\usart_m8.c
0000 .dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
0000 _uart0_rx_isr::
0000 2A92 st -y,R2
0002 8A93 st -y,R24
0004 9A93 st -y,R25
0006 EA93 st -y,R30
0008 FA93 st -y,R31
000A 2FB6 in R2,0x3f
000C 2A92 st -y,R2
000E .dbline -1
000E .dbline 28
000E .dbline 31
000E 80E0 ldi R24,<_UART_RX_buff
0010 90E0 ldi R25,>_UART_RX_buff
0012 E0910000 lds R30,_Rx_Count
0016 FF27 clr R31
0018 E80F add R30,R24
001A F91F adc R31,R25
001C 2CB0 in R2,0xc
001E 2082 std z+0,R2
0020 .dbline 32
0020 80910000 lds R24,_Rx_Count
0024 8F5F subi R24,255 ; addi 1
0026 80930000 sts _Rx_Count,R24
002A .dbline 33
002A 8930 cpi R24,9
002C 31F4 brne L2
002E .dbline 34
002E .dbline 35
002E 81E0 ldi R24,1
0030 80930200 sts _Rx_Flag,R24
0034 .dbline 37
0034 2224 clr R2
0036 20920000 sts _Rx_Count,R2
003A .dbline 39
003A L2:
003A .dbline -2
003A L1:
003A 2990 ld R2,y+
003C 2FBE out 0x3f,R2
003E F991 ld R31,y+
0040 E991 ld R30,y+
0042 9991 ld R25,y+
0044 8991 ld R24,y+
0046 2990 ld R2,y+
0048 .dbline 0 ; func end
0048 1895 reti
004A .dbend
004A .dbfunc e uart0_init _uart0_init fV
.even
004A _uart0_init::
004A .dbline -1
004A .dbline 49
004A ; /*****************************************************************
004A ; //ICC-AVR application builder : 2005-8-19 14:40:53
004A ; // Target : M8
004A ; // Crystal: 7.3728Mhz
004A ; // Crystal: 4.6080Mhz
004A ;
004A ; 实验:做usart串行通讯实验
004A ; 目的:了解及会使用usart串口
004A ; CPU:atmega8L
004A ; 相关的5个寄存器:UCSRA,UCSRB,UCSRC,UDR,UBRR(UBRRH,UBRRL)
004A ; 其中:UBRRH和UCSRC共用一个地址
004A ; ******************************************************************/
004A ; /*配置:CKOPT=0,CKSEL3..0=1111,SUT1..0=11(65ms慢速上升电源)*/
004A ; #include "usart_m8.h"
004A ;
004A ; unsigned char UART_RX_buff[UART_RX_BUFFER_SIZE];
004A ; unsigned char UART_TX_buff[UART_TX_BUFFER_SIZE];
004A ; unsigned char Rx_Flag;
004A ; unsigned char Rx_Temp,Rx_Count;
004A ; unsigned char Rx_Start_Pack_Flag,Rx_Over_Pack_Flag;
004A ;
004A ; unsigned char Write_Error[6] = {'x','w','4','0','x',0};//后面这个零是一定要加的,表示字符串结束
004A ; unsigned char Read_Error[6] = {'x','w','8','0','x',0};//或者"\0"
004A ; unsigned char aa[5] = {'o','p'};
004A ;
004A ; #pragma interrupt_handler uart0_rx_isr:12
004A ; void uart0_rx_isr(void)
004A ; {
004A ; //uart has received a character in UDR
004A ;
004A ; UART_RX_buff[Rx_Count] = UDR;
004A ; Rx_Count = Rx_Count+1;
004A ; if(Rx_Count == 9)
004A ; {
004A ; Rx_Flag = true;
004A ; //USART_TransmitByte((Rx_Count+0x30));
004A ; Rx_Count = 0;
004A ; //上位机在这时候要停一会儿,才能发第二串数据
004A ; }
004A ; //USART_TransmitByte((Rx_Count+0x30));
004A ; }
004A ;
004A ; //UART0 initialize
004A ; // desired baud rate: 9600
004A ; // actual: baud rate:9600 (0.0%)
004A ; // char size: 8 bit
004A ; // parity: Disabled
004A ; void uart0_init(void)
004A ; {
004A .dbline 50
004A ; Rx_Count = 0;
004A 2224 clr R2
004C 20920000 sts _Rx_Count,R2
0050 .dbline 51
0050 ; Rx_Flag = false;
0050 20920200 sts _Rx_Flag,R2
0054 .dbline 52
0054 ; Rx_Start_Pack_Flag = false;
0054 20924400 sts _Rx_Start_Pack_Flag,R2
0058 .dbline 53
0058 ; Rx_Over_Pack_Flag = false;
0058 20924300 sts _Rx_Over_Pack_Flag,R2
005C .dbline 55
005C ; //本身的uart的初始化
005C ; UCSRB = 0x00; //disable while setting baud rate
005C 2AB8 out 0xa,R2
005E .dbline 59
005E ; //UCSRB[RXCIE,TXCIE,UDRIE,RXEN,TXEN,UCSZ2,RXB8,TXB8]
005E ; //Bit 7 – RXCIE: RX Complete Interrupt Enable
005E ;
005E ; UCSRA = 0x00;
005E 2BB8 out 0xb,R2
0060 .dbline 62
0060 ; //UCSRA[RXC,TXC,UDRE,FE,DOR,PE,U2X,MPCM]
0060 ;
0060 ; UCSRC = (BIT(URSEL)|BIT(UCSZ1)|BIT(UCSZ0));//设置成8位
0060 86E8 ldi R24,134
0062 80BD out 0x20,R24
0064 .dbline 71
0064 ; //UCSRC[URSEL,UMSEL,UPM1,UPM0,USBS,UCSZ1,UCSZ0,UCPOL]
0064 ; //位URSEL:寄存器选择("1"为UCSRC或"0"为UBRRH)
0064 ; //位UMSEL:工作模式选择(0为异步,1为同步)
0064 ; //位UPM1..0:为校验方式,硬件支持校验
0064 ; //位USBS:停止位选择(0为一位,1为两位)
0064 ; //位UCSZ0..2:发送位数选择(如果是8位:011)
0064 ; //位UCPOL:时钟极性(只在同步模式使用,异步应置为"0")
0064 ;
0064 ; UBRRL = 0x77;//baudrate; //set baud rate lo
0064 87E7 ldi R24,119
0066 89B9 out 0x9,R24
0068 .dbline 72
0068 ; UBRRH = 0x00; //set baud rate hi(设置波特率只用低四位,加起来一共12位)
0068 20BC out 0x20,R2
006A .dbline 75
006A ; //UBRR = baudrate; /* set the baud rate */
006A ;
006A ; UCSRB = ((1<<RXCIE)|(1<<RXEN)|(1<<TXEN));
006A 88E9 ldi R24,152
006C 8AB9 out 0xa,R24
006E .dbline -2
006E L4:
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbend
0070 .dbfunc e UART_Receive _UART_Receive fV
.even
0070 _UART_Receive::
0070 .dbline -1
0070 .dbline 81
0070 ; }
0070 ; /************************************************************************
0070 ; 接收时采用中断方式,,,以"包"为单位接收(9个字符)
0070 ; *************************************************************************/
0070 ; void UART_Receive(void)
0070 ; {
0070 .dbline 82
0070 ; if(Rx_Flag == true)
0070 80910200 lds R24,_Rx_Flag
0074 8130 cpi R24,1
0076 71F4 brne L6
0078 .dbline 83
0078 ; {
0078 .dbline 84
0078 ; Rx_Flag = false;
0078 2224 clr R2
007A 20920200 sts _Rx_Flag,R2
007E .dbline 86
007E ;
007E ; if((UART_RX_buff[0] == 0x58)&&(UART_RX_buff[8] == 0x58))//0x58 = 'w'
007E 80912300 lds R24,_UART_RX_buff
0082 8835 cpi R24,88
0084 39F4 brne L8
0086 80912B00 lds R24,_UART_RX_buff+8
008A 8835 cpi R24,88
008C 19F4 brne L8
008E .dbline 87
008E ; {
008E .dbline 88
008E ; Rx_Over_Pack_Flag = true; //这个标志,可以让主函数去查
008E 81E0 ldi R24,1
0090 80934300 sts _Rx_Over_Pack_Flag,R24
0094 .dbline 90
0094 ; //Rx_Count = 0;//接收计数器清零
0094 ; }
0094 L8:
0094 .dbline 93
0094 L6:
0094 .dbline -2
0094 L5:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbend
0096 .dbfunc e USART_Transmit _USART_Transmit fV
0096 ; s -> R20,R21
.even
0096 _USART_Transmit::
0096 00D0 rcall push_gset1
0098 A801 movw R20,R16
009A .dbline -1
009A .dbline 132
009A ; //USART_TransmitByte('p');//接收一包完,就发一个信号叫上机暂停发
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -