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

📄 chuankou.lis

📁 ATMAGE128串口通信程序-中断方式
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 005E 8FEF              ldi R24,255
 0060 80936200          sts 98,R24
 0064                   .dbline 75
 0064           ;  DDRF  = 0xFF; 
 0064 80936100          sts 97,R24
 0068                   .dbline 76
 0068           ;  PORTG = 0xFF; 
 0068 80936500          sts 101,R24
 006C                   .dbline 77
 006C           ;  DDRG  = 0x00;
 006C 20926400          sts 100,R2
 0070                   .dbline -2
 0070           L14:
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072                   .dbend
 0072                   .dbfunc e usart0_init _usart0_init fV
                        .even
 0072           _usart0_init::
 0072                   .dbline -1
 0072                   .dbline 81
 0072           ; }
 0072           ; /*****************串口初始化*********************************/
 0072           ; void usart0_init(void) 
 0072           ; {
 0072                   .dbline 82
 0072           ;  UCSR0B = 0x00;                     //禁止发送和接收
 0072 2224              clr R2
 0074 2AB8              out 0xa,R2
 0076                   .dbline 83
 0076           ;  UCSR0A = 0x02;                     //倍速异步模式USX0=1
 0076 82E0              ldi R24,2
 0078 8BB9              out 0xb,R24
 007A                   .dbline 84
 007A           ;  UCSR0C = 0x06;                     //0000 0110,UCSZ01=1,UCSZ00=1;8位字符,1位停止位 
 007A 86E0              ldi R24,6
 007C 80939500          sts 149,R24
 0080                   .dbline 85
 0080           ;  UBRR0L=(Crystal/8/(Baud+1))%256;   //若为正常异步模式USX0=0则位(Crystal/16/(Baud+1))%256
 0080 88E6              ldi R24,104
 0082 89B9              out 0x9,R24
 0084                   .dbline 86
 0084           ;  UBRR0H=(Crystal/8/(Baud+1))/256;   //参见ATMAGE128使用手册
 0084 20929000          sts 144,R2
 0088                   .dbline 87
 0088           ;  UCSR0B=0xD8 ;                                           //允许发送和接收,接收和发送结束中断使能
 0088 88ED              ldi R24,216
 008A 8AB9              out 0xa,R24
 008C                   .dbline -2
 008C           L15:
 008C                   .dbline 0 ; func end
 008C 0895              ret
 008E                   .dbend
 008E                   .dbfunc e init_devices _init_devices fV
                        .even
 008E           _init_devices::
 008E                   .dbline -1
 008E                   .dbline 91
 008E           ; }
 008E           ; /******************初始器件**************************************/
 008E           ; void init_devices(void) 
 008E           ; {
 008E                   .dbline 92
 008E           ;  port_init();
 008E DCDF              xcall _port_init
 0090                   .dbline 93
 0090           ;  usart0_init();
 0090                   .dbline -2
 0090           L16:
 0090                   .dbline 0 ; func end
 0090 F0CF              xjmp _usart0_init
 0092                   .dbend
                        .area vector(rom, abs)
                        .org 72
 0048 0C944900          jmp _usart0_RX_interrupt
                        .area text(rom, con, rel)
 0092                   .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
 0092                   .dbfunc e usart0_RX_interrupt _usart0_RX_interrupt fV
                        .even
 0092           _usart0_RX_interrupt::
 0092 2A92              st -y,R2
 0094 8A93              st -y,R24
 0096 2FB6              IN R2,63
 0098 2A92              st -y,R2
 009A                   .dbline -1
 009A                   .dbline 99
 009A           ;  }
 009A           ; 
 009A           ; /****************中断接收服务处理子程序*******************************/
 009A           ; #pragma interrupt_handler usart0_RX_interrupt:iv_USART0_RX  //  19
 009A           ; void usart0_RX_interrupt(void)
 009A           ; {
 009A                   .dbline 101
 009A           ;     
 009A           ;     UCSR0B=0x00;                         //禁止发送和接收
 009A 2224              clr R2
 009C 2AB8              out 0xa,R2
 009E                   .dbline 102
 009E           ;     data_temp = UDR0;                    //从数据缓冲器中接收数据
 009E 2CB0              in R2,0xc
 00A0 20920000          sts _data_temp,R2
 00A4                   .dbline 103
 00A4           ;       UCSR0B=0xD8 ;                        //允许发送和接收,接收和发送结束中断使能
 00A4 88ED              ldi R24,216
 00A6 8AB9              out 0xa,R24
 00A8                   .dbline 104
 00A8           ;       if(data_temp=='0')                  //如果接收到的字符为'0'
 00A8 80910000          lds R24,_data_temp
 00AC 8033              cpi R24,48
 00AE 21F4              brne L18
 00B0           X3:
 00B0                   .dbline 105
 00B0           ;     UDR0 = data;                                              //将数据data放入缓冲器,发送数据
 00B0 20900000          lds R2,_data
 00B4 2CB8              out 0xc,R2
 00B6 03C0              xjmp L19
 00B8           L18:
 00B8                   .dbline 107
 00B8           ;       else
 00B8           ;       UDR0=data_temp;                                                 //否则将接收到的数据返回
 00B8 20900000          lds R2,_data_temp
 00BC 2CB8              out 0xc,R2
 00BE           L19:
 00BE                   .dbline -2
 00BE           L17:
 00BE                   .dbline 0 ; func end
 00BE 2990              ld R2,y+
 00C0 2FBE              OUT 63,R2
 00C2 8991              ld R24,y+
 00C4 2990              ld R2,y+
 00C6 1895              reti
 00C8                   .dbend
                        .area vector(rom, abs)
                        .org 80
 0050 0C946400          jmp _usart0_TX_interrupt
                        .area text(rom, con, rel)
 00C8                   .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
 00C8                   .dbfunc e usart0_TX_interrupt _usart0_TX_interrupt fV
                        .even
 00C8           _usart0_TX_interrupt::
 00C8 0A92              st -y,R0
 00CA 0FB6              IN R0,63
 00CC 0A92              st -y,R0
 00CE                   .dbline -1
 00CE                   .dbline 114
 00CE           ;       
 00CE           ; }  
 00CE           ;  
 00CE           ; /*********************中断发送服务处理子程序**************************/
 00CE           ; #pragma interrupt_handler usart0_TX_interrupt:iv_USART0_TX  //  21
 00CE           ; void usart0_TX_interrupt(void)
 00CE           ; {
 00CE                   .dbline 115
 00CE           ;   _NOP();
 00CE 0000              nop
 00D0                   .dbline 116
 00D0           ;  UCSR0A |= (1<<6);                      //发送结束清零
 00D0 5E9A              sbi 0xb,6
 00D2                   .dbline -2
 00D2           L20:
 00D2                   .dbline 0 ; func end
 00D2 0990              ld R0,y+
 00D4 0FBE              OUT 63,R0
 00D6 0990              ld R0,y+
 00D8 1895              reti
 00DA                   .dbend
 00DA                   .dbfunc e main _main fV
                        .even
 00DA           _main::
 00DA                   .dbline -1
 00DA                   .dbline 120
 00DA           ; }  
 00DA           ; /*******************主程序****************************/
 00DA           ; void  main(void)
 00DA           ;  {
 00DA                   .dbline 122
 00DA           ;    
 00DA           ;   CLI();                                //总中断禁止                                                     
 00DA F894              cli
 00DC                   .dbline 123
 00DC           ;   init_devices();
 00DC D8DF              xcall _init_devices
 00DE                   .dbline 124
 00DE           ;   SEI();                              //总中断允许
 00DE 7894              sei
 00E0           L22:
 00E0                   .dbline 127
 00E0           ; 
 00E0           ;     while(1)                          //循环等待中断处理
 00E0           ;      {
 00E0                   .dbline 129
 00E0           ;       
 00E0           ;      }                                    
 00E0           L23:
 00E0                   .dbline 126
 00E0 FFCF              xjmp L22
 00E2           X4:
 00E2                   .dbline -2
 00E2           L21:
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
 00E4                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\chuankou.c
 0000           _data_temp::
 0000                   .blkb 1
 0001                   .dbsym e data_temp _data_temp c
 0001           ; }     
 0001           ; 

⌨️ 快捷键说明

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