⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chuankou.lst

📁 ATMAGE128串口通信程序-查询方式 ICCAVR编译
💻 LST
字号:
__start:
__text_start:
      59 EFCF      LDI	R28,0xFF
      5A E1D0      LDI	R29,0x10
      5B BFCD      OUT	0x3D,R28
      5C BFDE      OUT	0x3E,R29
      5D 51C0      SUBI	R28,0x10
      5E 40D0      SBCI	R29,0
      5F EA0A      LDI	R16,0xAA
      60 8308      ST	Y,R16
      61 2400      CLR	R0
      62 E2E5      LDI	R30,0x25
      63 E0F1      LDI	R31,1
      64 E011      LDI	R17,1
      65 32E5      CPI	R30,0x25
      66 07F1      CPC	R31,R17
      67 F011      BEQ	0x006A
      68 9201      ST	Z+,R0
      69 CFFB      RJMP	0x0065
      6A 8300      ST	Z,R16
      6B E8EC      LDI	R30,0x8C
      6C E0F0      LDI	R31,0
      6D E0A0      LDI	R26,0
      6E E0B1      LDI	R27,1
      6F E010      LDI	R17,0
      70 E000      LDI	R16,0
      71 BF0B      OUT	0x3B,R16
      72 3BE1      CPI	R30,0xB1
      73 07F1      CPC	R31,R17
      74 F021      BEQ	0x0079
      75 95C8      LPM
      76 9631      ADIW	R30,1
      77 920D      ST	X+,R0
      78 CFF9      RJMP	0x0072
      79 940E 00B9 CALL	_main
_exit:
      7B CFFF      RJMP	_exit
FILE: C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
(0001) /***********************************************************/
(0002) //Title:ATMAGE128串口通信程序-查询方式
(0003) //ICC-AVR : 2009-2-22 13:37:40
(0004) // Target : M128
(0005) // Crystal: 8.0000Mhz
(0006) //Author  :borlittle
(0007) //Function:usart0 test
(0008) //备注   :本程序经调试好使,如果程序不好使,请注意检查更改波特率和晶振频率以及
(0009) //检查调试助手和单片机的熔丝位设置,尤其注意不要编程103模式兼容位
(0010) /***********************************************************/
(0011) #include <iom128v.h>
(0012) #include <macros.h>
(0013) 
(0014) #define uchar unsigned char      //定义无符号字符为 uchar
(0015) #define uint  unsigned int       //定义无符号整型
(0016) #define Crystal 8000000 //晶振8MHZ 
(0017) #define Baud 9600         //波特率
(0018) 
(0019) 
(0020) //函数声明
(0021) void port_init(void);
(0022) void usart0_init(void);
(0023) void init_devices(void);
(0024) void usart0_char_send(uchar i);
(0025) void usart0_str_send(char *s);
(0026) uchar usart0_char_receive(void);
(0027) 
(0028) /******************端口初始化*******************************/
(0029) void port_init(void) 
(0030) {
(0031)  PORTA = 0xFF; 
_port_init:
      7C EF8F      LDI	R24,0xFF
      7D BB8B      OUT	0x1B,R24
(0032)  DDRA  = 0x00; 
      7E 2422      CLR	R2
      7F BA2A      OUT	0x1A,R2
(0033)  PORTB = 0xFF; 
      80 BB88      OUT	0x18,R24
(0034)  DDRB  = 0xFF; 
      81 BB87      OUT	0x17,R24
(0035)  PORTC = 0xFF; 
      82 BB85      OUT	0x15,R24
(0036)  DDRC  = 0x00;
      83 BA24      OUT	0x14,R2
(0037)   
(0038)  PORTE = 0xFF;   //设置RXD0和TXD0
      84 B983      OUT	0x03,R24
(0039)  DDRE  = 0x02;
      85 E082      LDI	R24,2
      86 B982      OUT	0x02,R24
(0040)  
(0041)  PORTF = 0xFF; 
      87 EF8F      LDI	R24,0xFF
      88 9380 0062 STS	0x0062,R24
(0042)  DDRF  = 0x00; 
      8A 9220 0061 STS	0x0061,R2
(0043)  PORTG = 0xFF; 
      8C 9380 0065 STS	0x0065,R24
(0044)  DDRG  = 0xFF; 
      8E 9380 0064 STS	0x0064,R24
      90 9508      RET
(0045) }
(0046) /*****************串口0初始化*********************************/
(0047) void usart0_init(void) 
(0048) {
(0049)  UCSR0B = 0x00;                     //禁止发送和接收
_usart0_init:
      91 2422      CLR	R2
      92 B82A      OUT	0x0A,R2
(0050)  UCSR0A = 0x02;                     //倍速异步模式USX0=1
      93 E082      LDI	R24,2
      94 B98B      OUT	0x0B,R24
(0051)  UCSR0C = 0x06;                     //0000 0110,UCSZ01=1,UCSZ00=1;8位字符,1位停止位 
      95 E086      LDI	R24,6
      96 9380 0095 STS	0x0095,R24
(0052)  UBRR0L=(Crystal/8/(Baud+1))%256;   //若为正常异步模式USX0=0则位(Crystal/16/(Baud+1))%256
      98 E688      LDI	R24,0x68
      99 B989      OUT	0x09,R24
(0053)  UBRR0H=(Crystal/8/(Baud+1))/256;   //参见ATMAGE128使用手册
      9A 9220 0090 STS	0x0090,R2
(0054)  UCSR0B = 0x18;                     //允许发送和接收
      9C E188      LDI	R24,0x18
      9D B98A      OUT	0x0A,R24
      9E 9508      RET
(0055) }
(0056) /******************初始器件**************************************/
(0057) void init_devices(void) 
(0058) {
(0059)  port_init();
_init_devices:
      9F DFDC      RCALL	_port_init
(0060)  usart0_init();
      A0 CFF0      RJMP	_usart0_init
(0061)  }
(0062) //****************发送一个字符******************************
(0063) void usart0_char_send(uchar i)
(0064) {
(0065) while(!(UCSR0A&(1<<UDRE0)));
_usart0_char_send:
  i                    --> R16
      A1 9B5D      SBIS	0x0B,5
      A2 CFFE      RJMP	_usart0_char_send
(0066) UDR0=i;
      A3 B90C      OUT	0x0C,R16
      A4 9508      RET
_usart0_str_send:
  s                    --> R20
      A5 934A      ST	-Y,R20
      A6 935A      ST	-Y,R21
      A7 01A8      MOVW	R20,R16
(0067) }
(0068) /******************发送一个字符串*************************/
(0069) void usart0_str_send(char *s) 
(0070) {
      A8 C005      RJMP	0x00AE
(0071)  while(*s)
(0072)  {
(0073)  usart0_char_send(*s); 
      A9 01FA      MOVW	R30,R20
      AA 8100      LD	R16,Z
      AB DFF5      RCALL	_usart0_char_send
(0074)  s++;
      AC 5F4F      SUBI	R20,0xFF
      AD 4F5F      SBCI	R21,0xFF
      AE 01FA      MOVW	R30,R20
      AF 8020      LD	R2,Z
      B0 2022      TST	R2
      B1 F7B9      BNE	0x00A9
      B2 9159      LD	R21,Y+
      B3 9149      LD	R20,Y+
      B4 9508      RET
(0075)  }
(0076) }
(0077) /*****************接收一个字符****************************/
(0078) uchar usart0_char_receive(void) 
(0079) {
(0080) while(!(UCSR0A&(1<<RXC0)));
_usart0_char_receive:
      B5 9B5F      SBIS	0x0B,7
      B6 CFFE      RJMP	_usart0_char_receive
(0081) return UDR0;
      B7 B10C      IN	R16,0x0C
      B8 9508      RET
(0082) }
(0083) /***************主函数*****************************/
(0084) void main(void)
(0085) {
(0086) uchar usart0_temp; 
(0087) init_devices();
_main:
  usart0_temp          --> R10
      B9 DFE5      RCALL	_init_devices
(0088) usart0_str_send("usart0 WORKS WELL   ");
      BA E100      LDI	R16,0x10
      BB E011      LDI	R17,1
      BC DFE8      RCALL	_usart0_str_send
      BD C00A      RJMP	0x00C8
(0089)  while(1) 
(0090)  {
(0091)  usart0_temp=usart0_char_receive();   //等待接收数据
      BE DFF6      RCALL	_usart0_char_receive
      BF 2EA0      MOV	R10,R16
(0092)  usart0_str_send("当前数据是:");     //发送数据
      C0 E003      LDI	R16,3
      C1 E011      LDI	R17,1
      C2 DFE2      RCALL	_usart0_str_send
(0093)  usart0_char_send(usart0_temp); 
      C3 2D0A      MOV	R16,R10
      C4 DFDC      RCALL	_usart0_char_send
(0094)  usart0_str_send("  ");
FILE: <library>
      C5 E000      LDI	R16,0
      C6 E011      LDI	R17,1
      C7 DFDD      RCALL	_usart0_str_send
      C8 CFF5      RJMP	0x00BE
      C9 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -