📄 chuankou.lis
字号:
.module chuankou.c
.area text(rom, con, rel)
0000 .dbfile ..\..\..\..\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
0000 .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 30
0000 ; /***********************************************************/
0000 ; //Title:ATMAGE128串口通信程序-查询方式
0000 ; //ICC-AVR : 2009-2-22 13:37:40
0000 ; // Target : M128
0000 ; // Crystal: 8.0000Mhz
0000 ; //Author :borlittle
0000 ; //Function:usart0 test
0000 ; //备注 :本程序经调试好使,如果程序不好使,请注意检查更改波特率和晶振频率以及
0000 ; //检查调试助手和单片机的熔丝位设置,尤其注意不要编程103模式兼容位
0000 ; /***********************************************************/
0000 ; #include <iom128v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define uchar unsigned char //定义无符号字符为 uchar
0000 ; #define uint unsigned int //定义无符号整型
0000 ; #define Crystal 8000000 //晶振8MHZ
0000 ; #define Baud 9600 //波特率
0000 ;
0000 ;
0000 ; //函数声明
0000 ; void port_init(void);
0000 ; void usart0_init(void);
0000 ; void init_devices(void);
0000 ; void usart0_char_send(uchar i);
0000 ; void usart0_str_send(char *s);
0000 ; uchar usart0_char_receive(void);
0000 ;
0000 ; /******************端口初始化*******************************/
0000 ; void port_init(void)
0000 ; {
0000 .dbline 31
0000 ; PORTA = 0xFF;
0000 8FEF ldi R24,255
0002 8BBB out 0x1b,R24
0004 .dbline 32
0004 ; DDRA = 0x00;
0004 2224 clr R2
0006 2ABA out 0x1a,R2
0008 .dbline 33
0008 ; PORTB = 0xFF;
0008 88BB out 0x18,R24
000A .dbline 34
000A ; DDRB = 0xFF;
000A 87BB out 0x17,R24
000C .dbline 35
000C ; PORTC = 0xFF;
000C 85BB out 0x15,R24
000E .dbline 36
000E ; DDRC = 0x00;
000E 24BA out 0x14,R2
0010 .dbline 38
0010 ;
0010 ; PORTE = 0xFF; //设置RXD0和TXD0
0010 83B9 out 0x3,R24
0012 .dbline 39
0012 ; DDRE = 0x02;
0012 82E0 ldi R24,2
0014 82B9 out 0x2,R24
0016 .dbline 41
0016 ;
0016 ; PORTF = 0xFF;
0016 8FEF ldi R24,255
0018 80936200 sts 98,R24
001C .dbline 42
001C ; DDRF = 0x00;
001C 20926100 sts 97,R2
0020 .dbline 43
0020 ; PORTG = 0xFF;
0020 80936500 sts 101,R24
0024 .dbline 44
0024 ; DDRG = 0xFF;
0024 80936400 sts 100,R24
0028 .dbline -2
0028 L1:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e usart0_init _usart0_init fV
.even
002A _usart0_init::
002A .dbline -1
002A .dbline 48
002A ; }
002A ; /*****************串口0初始化*********************************/
002A ; void usart0_init(void)
002A ; {
002A .dbline 49
002A ; UCSR0B = 0x00; //禁止发送和接收
002A 2224 clr R2
002C 2AB8 out 0xa,R2
002E .dbline 50
002E ; UCSR0A = 0x02; //倍速异步模式USX0=1
002E 82E0 ldi R24,2
0030 8BB9 out 0xb,R24
0032 .dbline 51
0032 ; UCSR0C = 0x06; //0000 0110,UCSZ01=1,UCSZ00=1;8位字符,1位停止位
0032 86E0 ldi R24,6
0034 80939500 sts 149,R24
0038 .dbline 52
0038 ; UBRR0L=(Crystal/8/(Baud+1))%256; //若为正常异步模式USX0=0则位(Crystal/16/(Baud+1))%256
0038 88E6 ldi R24,104
003A 89B9 out 0x9,R24
003C .dbline 53
003C ; UBRR0H=(Crystal/8/(Baud+1))/256; //参见ATMAGE128使用手册
003C 20929000 sts 144,R2
0040 .dbline 54
0040 ; UCSR0B = 0x18; //允许发送和接收
0040 88E1 ldi R24,24
0042 8AB9 out 0xa,R24
0044 .dbline -2
0044 L2:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbend
0046 .dbfunc e init_devices _init_devices fV
.even
0046 _init_devices::
0046 .dbline -1
0046 .dbline 58
0046 ; }
0046 ; /******************初始器件**************************************/
0046 ; void init_devices(void)
0046 ; {
0046 .dbline 59
0046 ; port_init();
0046 DCDF xcall _port_init
0048 .dbline 60
0048 ; usart0_init();
0048 .dbline -2
0048 L3:
0048 .dbline 0 ; func end
0048 F0CF xjmp _usart0_init
004A .dbend
004A .dbfunc e usart0_char_send _usart0_char_send fV
004A ; i -> R16
.even
004A _usart0_char_send::
004A .dbline -1
004A .dbline 64
004A ; }
004A ; //****************发送一个字符******************************
004A ; void usart0_char_send(uchar i)
004A ; {
004A L5:
004A .dbline 65
004A ; while(!(UCSR0A&(1<<UDRE0)));
004A L6:
004A .dbline 65
004A 5D9B sbis 0xb,5
004C FECF rjmp L5
004E X0:
004E .dbline 66
004E ; UDR0=i;
004E 0CB9 out 0xc,R16
0050 .dbline -2
0050 L4:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r i 16 c
0052 .dbend
0052 .dbfunc e usart0_str_send _usart0_str_send fV
0052 ; s -> R20,R21
.even
0052 _usart0_str_send::
0052 4A93 st -y,R20
0054 5A93 st -y,R21
0056 A801 movw R20,R16
0058 .dbline -1
0058 .dbline 70
0058 ; }
0058 ; /******************发送一个字符串*************************/
0058 ; void usart0_str_send(char *s)
0058 ; {
0058 05C0 xjmp L10
005A L9:
005A .dbline 72
005A ; while(*s)
005A ; {
005A .dbline 73
005A ; usart0_char_send(*s);
005A FA01 movw R30,R20
005C 0081 ldd R16,z+0
005E F5DF xcall _usart0_char_send
0060 .dbline 74
0060 ; s++;
0060 4F5F subi R20,255 ; offset = 1
0062 5F4F sbci R21,255
0064 .dbline 75
0064 ; }
0064 L10:
0064 .dbline 71
0064 FA01 movw R30,R20
0066 2080 ldd R2,z+0
0068 2220 tst R2
006A B9F7 brne L9
006C X1:
006C .dbline -2
006C L8:
006C .dbline 0 ; func end
006C 5991 ld R21,y+
006E 4991 ld R20,y+
0070 0895 ret
0072 .dbsym r s 20 pc
0072 .dbend
0072 .dbfunc e usart0_char_receive _usart0_char_receive fc
.even
0072 _usart0_char_receive::
0072 .dbline -1
0072 .dbline 79
0072 ; }
0072 ; /*****************接收一个字符****************************/
0072 ; uchar usart0_char_receive(void)
0072 ; {
0072 L13:
0072 .dbline 80
0072 ; while(!(UCSR0A&(1<<RXC0)));
0072 L14:
0072 .dbline 80
0072 5F9B sbis 0xb,7
0074 FECF rjmp L13
0076 X2:
0076 .dbline 81
0076 ; return UDR0;
0076 0CB1 in R16,0xc
0078 .dbline -2
0078 L12:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbend
007A .dbfunc e main _main fV
007A ; usart0_temp -> R10
.even
007A _main::
007A .dbline -1
007A .dbline 85
007A ; }
007A ; /***************主函数*****************************/
007A ; void main(void)
007A ; {
007A .dbline 87
007A ; uchar usart0_temp;
007A ; init_devices();
007A E5DF xcall _init_devices
007C .dbline 88
007C ; usart0_str_send("usart0 WORKS WELL ");
007C 00E0 ldi R16,<L17
007E 10E0 ldi R17,>L17
0080 E8DF xcall _usart0_str_send
0082 0AC0 xjmp L19
0084 L18:
0084 .dbline 90
0084 ; while(1)
0084 ; {
0084 .dbline 91
0084 ; usart0_temp=usart0_char_receive(); //等待接收数据
0084 F6DF xcall _usart0_char_receive
0086 A02E mov R10,R16
0088 .dbline 92
0088 ; usart0_str_send("当前数据是:"); //发送数据
0088 00E0 ldi R16,<L21
008A 10E0 ldi R17,>L21
008C E2DF xcall _usart0_str_send
008E .dbline 93
008E ; usart0_char_send(usart0_temp);
008E 0A2D mov R16,R10
0090 DCDF xcall _usart0_char_send
0092 .dbline 94
0092 ; usart0_str_send(" ");
0092 00E0 ldi R16,<L22
0094 10E0 ldi R17,>L22
0096 DDDF xcall _usart0_str_send
0098 .dbline 95
0098 ; }
0098 L19:
0098 .dbline 89
0098 F5CF xjmp L18
009A X3:
009A .dbline -2
009A L16:
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r usart0_temp 10 c
009C .dbend
.area data(ram, con, rel)
0000 .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
0000 L22:
0000 .blkb 3
.area idata
0000 202000 .byte 32,32,0
.area data(ram, con, rel)
0003 .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
0003 L21:
0003 .blkb 13
.area idata
0003 B5B1C7B0CAFDBEDDCAC7A3BA00 .byte 181,177,199,176,202,253,190,221,202,199,163,186,0
.area data(ram, con, rel)
0010 .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
0010 L17:
0010 .blkb 21
.area idata
0010 75736172743020574F524B532057454C .byte 'u,'s,'a,'r,'t,48,32,'W,'O,'R,'K,'S,32,'W,'E,'L
0020 4C20202000 .byte 'L,32,32,32,0
.area data(ram, con, rel)
0025 .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
0025 ; }
0025 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -