📄 uart_atmega8.lis
字号:
.module uart_atmega8.c
.area text(rom, con, rel)
0000 .dbfile H:\UART_TO_TWI\uart_atmega8.c
0000 .dbfunc e main _main fV
.even
0000 _main::
0000 .dbline -1
0000 .dbline 29
0000 ; /*****************************************************************
0000 ; ICC-AVR application builder : 2005-8-19 14:40:53
0000 ; Target : M8
0000 ; Crystal: 7.3728Mhz
0000 ; // Crystal: 4.6080Mhz
0000 ;
0000 ; 实验:做usart串行通讯实验
0000 ; 目的:了解及会使用usart串口
0000 ; CPU:atmega8L
0000 ; 相关的5个寄存器:UCSRA,UCSRB,UCSRC,UDR,UBRR(UBRRH,UBRRL)
0000 ; 其中:UBRRH和UCSRC共用一个地址
0000 ; ******************************************************************/
0000 ; /*配置:CKOPT=0,CKSEL3..0=1111,SUT1..0=11(65ms慢速上升电源)*/
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; #include "usart_m8.h"
0000 ; #include "twi.h"
0000 ;
0000 ; void check_I2C(void);
0000 ; void init_data(void);
0000 ; void port_init(void);
0000 ; void init_devices(void);
0000 ; void check_watchdog(void);
0000 ; void process_data_pack(void);
0000 ; void watchdog_init(void);
0000 ;
0000 ;
0000 ; void main(void)
0000 ; {
0000 .dbline 30
0000 ; init_devices();
0000 33D0 rcall _init_devices
0002 .dbline 31
0002 ; init_data();
0002 26D0 rcall _init_data
0004 06C0 rjmp L3
0006 L2:
0006 .dbline 34
0006 .dbline 35
0006 1CD0 rcall _check_I2C
0008 .dbline 36
0008 00E0 ldi R16,<L5
000A 10E0 ldi R17,>L5
000C 00D0 rcall _USART_Transmit
000E .dbline 37
000E 03D0 rcall _process_data_pack
0010 .dbline 38
0010 36D0 rcall _check_watchdog
0012 .dbline 39
0012 L3:
0012 .dbline 33
0012 F9CF rjmp L2
0014 X0:
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e process_data_pack _process_data_pack fV
.even
0016 _process_data_pack::
0016 .dbline -1
0016 .dbline 43
0016 ;
0016 ; while(1) //forever
0016 ; {
0016 ; check_I2C();
0016 ; USART_Transmit( "我是中国人" );
0016 ; process_data_pack();
0016 ; check_watchdog();//喂狗
0016 ; }
0016 ; }
0016 ; //解包
0016 ; void process_data_pack(void)
0016 ; {
0016 .dbline 44
0016 ; if(Rx_Over_Pack_Flag == true)
0016 80910000 lds R24,_Rx_Over_Pack_Flag
001A 8130 cpi R24,1
001C 81F4 brne L7
001E .dbline 45
001E ; {
001E .dbline 46
001E ; if((UART_RX_buff[1] == 0x57)&&(UART_RX_buff[8] == 0x58))
001E 80910100 lds R24,_UART_RX_buff+1
0022 8735 cpi R24,87
0024 21F4 brne L9
0026 80910800 lds R24,_UART_RX_buff+8
002A 8835 cpi R24,88
002C 01F4 brne L9
002E .dbline 47
002E ; {
002E .dbline 49
002E ;
002E ; }
002E L9:
002E .dbline 50
002E ; if((UART_RX_buff[1] == 0x52)&&(UART_RX_buff[8] == 0x58))
002E 80910100 lds R24,_UART_RX_buff+1
0032 8235 cpi R24,82
0034 21F4 brne L13
0036 80910800 lds R24,_UART_RX_buff+8
003A 8835 cpi R24,88
003C 01F4 brne L13
003E .dbline 51
003E ; {
003E .dbline 53
003E ;
003E ; }
003E L13:
003E .dbline 54
003E L7:
003E .dbline -2
003E L6:
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbend
0040 .dbfunc e check_I2C _check_I2C fV
0040 ; dat -> <dead>
.even
0040 _check_I2C::
0040 .dbline -1
0040 .dbline 59
0040 .dbline 62
0040 80910000 lds R24,_Mem_Write_Flag
0044 8130 cpi R24,1
0046 19F4 brne L18
0048 .dbline 63
0048 .dbline 64
0048 2224 clr R2
004A 20920000 sts _Mem_Write_Flag,R2
004E .dbline 66
004E .dbline 67
004E L18:
004E .dbline -2
004E L17:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbsym l dat 1 c
0050 .dbend
0050 .dbfunc e init_data _init_data fV
.even
0050 _init_data::
0050 .dbline -1
0050 .dbline 71
0050 ; }
0050 ; }
0050 ;
0050 ;
0050 ; void check_I2C(void)
0050 ; {
0050 ; unsigned char dat;
0050 ;
0050 ; if(Mem_Write_Flag == true)
0050 ; {
0050 ; Mem_Write_Flag = false;
0050 ;
0050 ; ;
0050 ; }
0050 ; }
0050 ;
0050 ; void init_data(void)
0050 ; {
0050 .dbline 72
0050 ; ;// Rx_Flag = false;
0050 .dbline -2
0050 L20:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbend
0052 .dbfunc e port_init _port_init fV
.even
0052 _port_init::
0052 .dbline -1
0052 .dbline 75
0052 ; }
0052 ; void port_init(void)
0052 ; {
0052 .dbline 76
0052 ; PORTB = 0x3F;
0052 8FE3 ldi R24,63
0054 88BB out 0x18,R24
0056 .dbline 77
0056 ; DDRB = 0x00;
0056 2224 clr R2
0058 27BA out 0x17,R2
005A .dbline 78
005A ; PORTC = 0x4F; //m103 output only
005A 8FE4 ldi R24,79
005C 85BB out 0x15,R24
005E .dbline 79
005E ; DDRC = 0x00;
005E 24BA out 0x14,R2
0060 .dbline 80
0060 ; PORTD = 0xFC;
0060 8CEF ldi R24,252
0062 82BB out 0x12,R24
0064 .dbline 81
0064 ; DDRD = 0x00;
0064 21BA out 0x11,R2
0066 .dbline -2
0066 L21:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbend
0068 .dbfunc e init_devices _init_devices fV
.even
0068 _init_devices::
0068 .dbline -1
0068 .dbline 85
0068 ; }
0068 ; //call this routine to initialize all peripherals
0068 ; void init_devices(void)
0068 ; {
0068 .dbline 87
0068 ; //stop errant interrupts until set up
0068 ; CLI(); //disable all interrupts
0068 F894 cli
006A .dbline 88
006A ; port_init();
006A F3DF rcall _port_init
006C .dbline 89
006C ; uart0_init();
006C 00D0 rcall _uart0_init
006E .dbline 90
006E ; twi_init();
006E 00D0 rcall _twi_init
0070 .dbline 91
0070 ; watchdog_init();
0070 08D0 rcall _watchdog_init
0072 .dbline 93
0072 ;
0072 ; MCUCR = 0x00;
0072 2224 clr R2
0074 25BE out 0x35,R2
0076 .dbline 94
0076 ; GICR = 0x00;
0076 2BBE out 0x3b,R2
0078 .dbline 95
0078 ; TIMSK = 0x00; //timer interrupt sources
0078 29BE out 0x39,R2
007A .dbline 96
007A ; SEI(); //re-enable interrupts
007A 7894 sei
007C .dbline -2
007C L22:
007C .dbline 0 ; func end
007C 0895 ret
007E .dbend
007E .dbfunc e check_watchdog _check_watchdog fV
.even
007E _check_watchdog::
007E .dbline -1
007E .dbline 100
007E ; //all peripherals are now initialized
007E ; }
007E ; void check_watchdog(void)
007E ; {
007E .dbline 101
007E ; WDR();//喂狗
007E A895 wdr
0080 .dbline -2
0080 L23:
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbend
0082 .dbfunc e watchdog_init _watchdog_init fV
.even
0082 _watchdog_init::
0082 .dbline -1
0082 .dbline 104
0082 ; }
0082 ; void watchdog_init(void)
0082 ; {
0082 .dbline 105
0082 ; WDR();//看门狗计数清零
0082 A895 wdr
0084 .dbline 106
0084 ; WDTCR=((1<<WDE)|(1<<WDP2)|(1<<WDP0));//64K分频,0.52S
0084 8DE0 ldi R24,13
0086 81BD out 0x21,R24
0088 .dbline -2
0088 L24:
0088 .dbline 0 ; func end
0088 0895 ret
008A .dbend
.area data(ram, con, rel)
0000 .dbfile H:\UART_TO_TWI\uart_atmega8.c
0000 L5:
0000 .blkb 11
.area idata
0000 CED2CAC7D6D0B9FAC8CB00 .byte 206,210,202,199,214,208,185,250,200,203,0
.area data(ram, con, rel)
000B .dbfile H:\UART_TO_TWI\uart_atmega8.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -