?? uart.lis
字號:
.module uart.c
.area data(ram, con, rel)
0000 _rd_index::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
0001 .dbsym e rd_index _rd_index c
0001 _wr_index::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
0002 .dbsym e wr_index _wr_index c
.area vector(rom, abs)
.org 22
0016 00C0 rjmp _uart_rxc
.area data(ram, con, rel)
0002 .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
.area text(rom, con, rel)
0000 .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
0000 .dbfunc e uart_rxc _uart_rxc fV
.even
0000 _uart_rxc::
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 19
000E ; /******************************************/
000E ; /* 廣州天河雙龍電子公司 */
000E ; /* http://www.sl.com.cn */
000E ; /* RS232通信驅動程序(中斷方式) */
000E ; /* 作者:ntzwq@wx88.net */
000E ; /* 2003年3月28日 */
000E ; /* 目標MCU:MEGA8 晶振:外部(EXT) 8MHZ */
000E ; /******************************************/
000E ; #include <iom8v.h>
000E ; #include "Twi.h"
000E ; #define fosc 8000000 //晶振8MHZ
000E ; #define baud 19200 //波特率
000E ; #define buffsize 64
000E ; unsigned char buff[buffsize];
000E ; unsigned char rd_index=0;
000E ; unsigned char wr_index=0;
000E ; #pragma interrupt_handler uart_rxc:iv_USART_RXC
000E ; void uart_rxc(void)
000E ; {
000E .dbline 20
000E ; buff[wr_index]=UDR;
000E 80E0 ldi R24,<_buff
0010 90E0 ldi R25,>_buff
0012 E0910100 lds R30,_wr_index
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 21
0020 ; if(wr_index<(buffsize-1))
0020 80910100 lds R24,_wr_index
0024 8F33 cpi R24,63
0026 20F4 brsh L2
0028 .dbline 22
0028 ; wr_index++;
0028 8F5F subi R24,255 ; addi 1
002A 80930100 sts _wr_index,R24
002E 03C0 rjmp L3
0030 L2:
0030 .dbline 24
0030 ; else
0030 ; wr_index=0;
0030 2224 clr R2
0032 20920100 sts _wr_index,R2
0036 L3:
0036 .dbline 25
0036 ; TWI_STATE=TWI_WR;//接收數據進入主機傳輸狀態
0036 80EF ldi R24,240
0038 80930000 sts _TWI_STATE,R24
003C .dbline -2
003C .dbline 26
003C ; }
003C L1:
003C 2990 ld R2,y+
003E 2FBE out 0x3f,R2
0040 F991 ld R31,y+
0042 E991 ld R30,y+
0044 9991 ld R25,y+
0046 8991 ld R24,y+
0048 2990 ld R2,y+
004A .dbline 0 ; func end
004A 1895 reti
004C .dbend
004C .dbfunc e putchar _putchar fV
004C ; c -> R16
.even
004C _putchar::
004C .dbline -1
004C .dbline 29
004C ; /* 字符輸出函數 */
004C ; void putchar(unsigned char c)
004C ; {
004C L5:
004C .dbline 30
004C L6:
004C .dbline 30
004C ; while (!(UCSRA&(1<<UDRE)));
004C 5D9B sbis 0xb,5
004E FECF rjmp L5
0050 .dbline 31
0050 ; UDR=c;
0050 0CB9 out 0xc,R16
0052 .dbline -2
0052 .dbline 32
0052 ; }
0052 L4:
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r c 16 c
0054 .dbend
0054 .dbfunc e getchar _getchar fc
0054 ; temp -> R16
.even
0054 _getchar::
0054 .dbline -1
0054 .dbline 35
0054 ; /* 字符輸入函數 */
0054 ; unsigned char getchar(void)
0054 ; {
0054 .dbline 37
0054 ; unsigned char temp;
0054 ; if(wr_index==rd_index)
0054 20900000 lds R2,_rd_index
0058 30900100 lds R3,_wr_index
005C 3214 cp R3,R2
005E 11F4 brne L9
0060 .dbline 38
0060 ; temp=0;
0060 0027 clr R16
0062 13C0 rjmp L10
0064 L9:
0064 .dbline 40
0064 ; else
0064 ; {
0064 .dbline 41
0064 ; temp=buff[rd_index];
0064 80E0 ldi R24,<_buff
0066 90E0 ldi R25,>_buff
0068 E0910000 lds R30,_rd_index
006C FF27 clr R31
006E E80F add R30,R24
0070 F91F adc R31,R25
0072 0081 ldd R16,z+0
0074 .dbline 42
0074 ; if(rd_index<(buffsize-1))
0074 80910000 lds R24,_rd_index
0078 8F33 cpi R24,63
007A 20F4 brsh L11
007C .dbline 43
007C ; rd_index++;
007C 8F5F subi R24,255 ; addi 1
007E 80930000 sts _rd_index,R24
0082 03C0 rjmp L12
0084 L11:
0084 .dbline 45
0084 ; else
0084 ; rd_index=0;
0084 2224 clr R2
0086 20920000 sts _rd_index,R2
008A L12:
008A .dbline 46
008A ; }
008A L10:
008A .dbline 47
008A ; return temp;
008A .dbline -2
008A L8:
008A .dbline 0 ; func end
008A 0895 ret
008C .dbsym r temp 16 c
008C .dbend
008C .dbfunc e puts _puts fV
008C ; s -> R20,R21
.even
008C _puts::
008C 00D0 rcall push_gset1
008E A801 movw R20,R16
0090 .dbline -1
0090 .dbline 51
0090 ; }
0090 ; /* 字符串輸出函數 */
0090 ; void puts(char *s)
0090 ; {
0090 05C0 rjmp L15
0092 L14:
0092 .dbline 53
0092 .dbline 54
0092 FA01 movw R30,R20
0094 0081 ldd R16,z+0
0096 DADF rcall _putchar
0098 .dbline 55
0098 4F5F subi R20,255 ; offset = 1
009A 5F4F sbci R21,255
009C .dbline 56
009C L15:
009C .dbline 52
009C ; while (*s)
009C FA01 movw R30,R20
009E 2080 ldd R2,z+0
00A0 2220 tst R2
00A2 B9F7 brne L14
00A4 .dbline 57
00A4 ; {
00A4 ; putchar(*s);
00A4 ; s++;
00A4 ; }
00A4 ; putchar(0x0a);//回車換行
00A4 0AE0 ldi R16,10
00A6 D2DF rcall _putchar
00A8 .dbline 58
00A8 ; putchar(0x0d);
00A8 0DE0 ldi R16,13
00AA D0DF rcall _putchar
00AC .dbline -2
00AC .dbline 59
00AC ; }
00AC L13:
00AC 00D0 rcall pop_gset1
00AE .dbline 0 ; func end
00AE 0895 ret
00B0 .dbsym r s 20 pc
00B0 .dbend
00B0 .dbfunc e uart_init _uart_init fV
.even
00B0 _uart_init::
00B0 .dbline -1
00B0 .dbline 62
00B0 ; /* UART初始化 */
00B0 ; void uart_init(void)
00B0 ; {
00B0 .dbline 64
00B0 ; //OSCCAL=read_flash(0x1f20);
00B0 ; UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允許發送、接收及接收中斷
00B0 88E9 ldi R24,152
00B2 8AB9 out 0xa,R24
00B4 .dbline 65
00B4 ; UBRRL=(fosc/16/(baud+1))%256;
00B4 8AE1 ldi R24,26
00B6 89B9 out 0x9,R24
00B8 .dbline 66
00B8 ; UBRRH=(fosc/16/(baud+1))/256;
00B8 2224 clr R2
00BA 20BC out 0x20,R2
00BC .dbline 67
00BC ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位數據+1位STOP位
00BC 86E8 ldi R24,134
00BE 80BD out 0x20,R24
00C0 .dbline -2
00C0 .dbline 68
00C0 ; }
00C0 L17:
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\icc\iccavr\mega8\mega8\I2C_COM\uart.c
0000 _buff::
0000 .blkb 64
0040 .dbsym e buff _buff A[64:64]c
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -