📄 uart_atmega8.s
字号:
.module uart_atmega8.c
.area text(rom, con, rel)
.dbfile H:\UART_TO_TWI\uart_atmega8.c
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 29
; /*****************************************************************
; ICC-AVR application builder : 2005-8-19 14:40:53
; Target : M8
; Crystal: 7.3728Mhz
; // Crystal: 4.6080Mhz
;
; 实验:做usart串行通讯实验
; 目的:了解及会使用usart串口
; CPU:atmega8L
; 相关的5个寄存器:UCSRA,UCSRB,UCSRC,UDR,UBRR(UBRRH,UBRRL)
; 其中:UBRRH和UCSRC共用一个地址
; ******************************************************************/
; /*配置:CKOPT=0,CKSEL3..0=1111,SUT1..0=11(65ms慢速上升电源)*/
; #include <iom8v.h>
; #include <macros.h>
; #include "usart_m8.h"
; #include "twi.h"
;
; void check_I2C(void);
; void init_data(void);
; void port_init(void);
; void init_devices(void);
; void check_watchdog(void);
; void process_data_pack(void);
; void watchdog_init(void);
;
;
; void main(void)
; {
.dbline 30
; init_devices();
rcall _init_devices
.dbline 31
; init_data();
rcall _init_data
rjmp L3
L2:
.dbline 34
.dbline 35
rcall _check_I2C
.dbline 36
ldi R16,<L5
ldi R17,>L5
rcall _USART_Transmit
.dbline 37
rcall _process_data_pack
.dbline 38
rcall _check_watchdog
.dbline 39
L3:
.dbline 33
rjmp L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e process_data_pack _process_data_pack fV
.even
_process_data_pack::
.dbline -1
.dbline 43
;
; while(1) //forever
; {
; check_I2C();
; USART_Transmit( "我是中国人" );
; process_data_pack();
; check_watchdog();//喂狗
; }
; }
; //解包
; void process_data_pack(void)
; {
.dbline 44
; if(Rx_Over_Pack_Flag == true)
lds R24,_Rx_Over_Pack_Flag
cpi R24,1
brne L7
.dbline 45
; {
.dbline 46
; if((UART_RX_buff[1] == 0x57)&&(UART_RX_buff[8] == 0x58))
lds R24,_UART_RX_buff+1
cpi R24,87
brne L9
lds R24,_UART_RX_buff+8
cpi R24,88
brne L9
.dbline 47
; {
.dbline 49
;
; }
L9:
.dbline 50
; if((UART_RX_buff[1] == 0x52)&&(UART_RX_buff[8] == 0x58))
lds R24,_UART_RX_buff+1
cpi R24,82
brne L13
lds R24,_UART_RX_buff+8
cpi R24,88
brne L13
.dbline 51
; {
.dbline 53
;
; }
L13:
.dbline 54
L7:
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
.dbfunc e check_I2C _check_I2C fV
; dat -> <dead>
.even
_check_I2C::
.dbline -1
.dbline 59
.dbline 62
lds R24,_Mem_Write_Flag
cpi R24,1
brne L18
.dbline 63
.dbline 64
clr R2
sts _Mem_Write_Flag,R2
.dbline 66
.dbline 67
L18:
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbsym l dat 1 c
.dbend
.dbfunc e init_data _init_data fV
.even
_init_data::
.dbline -1
.dbline 71
; }
; }
;
;
; void check_I2C(void)
; {
; unsigned char dat;
;
; if(Mem_Write_Flag == true)
; {
; Mem_Write_Flag = false;
;
; ;
; }
; }
;
; void init_data(void)
; {
.dbline 72
; ;// Rx_Flag = false;
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 75
; }
; void port_init(void)
; {
.dbline 76
; PORTB = 0x3F;
ldi R24,63
out 0x18,R24
.dbline 77
; DDRB = 0x00;
clr R2
out 0x17,R2
.dbline 78
; PORTC = 0x4F; //m103 output only
ldi R24,79
out 0x15,R24
.dbline 79
; DDRC = 0x00;
out 0x14,R2
.dbline 80
; PORTD = 0xFC;
ldi R24,252
out 0x12,R24
.dbline 81
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L21:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 85
; }
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 87
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 88
; port_init();
rcall _port_init
.dbline 89
; uart0_init();
rcall _uart0_init
.dbline 90
; twi_init();
rcall _twi_init
.dbline 91
; watchdog_init();
rcall _watchdog_init
.dbline 93
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 94
; GICR = 0x00;
out 0x3b,R2
.dbline 95
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 96
; SEI(); //re-enable interrupts
sei
.dbline -2
L22:
.dbline 0 ; func end
ret
.dbend
.dbfunc e check_watchdog _check_watchdog fV
.even
_check_watchdog::
.dbline -1
.dbline 100
; //all peripherals are now initialized
; }
; void check_watchdog(void)
; {
.dbline 101
; WDR();//喂狗
wdr
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 104
; }
; void watchdog_init(void)
; {
.dbline 105
; WDR();//看门狗计数清零
wdr
.dbline 106
; WDTCR=((1<<WDE)|(1<<WDP2)|(1<<WDP0));//64K分频,0.52S
ldi R24,13
out 0x21,R24
.dbline -2
L24:
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile H:\UART_TO_TWI\uart_atmega8.c
L5:
.blkb 11
.area idata
.byte 206,210,202,199,214,208,185,250,200,203,0
.area data(ram, con, rel)
.dbfile H:\UART_TO_TWI\uart_atmega8.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -