📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
.dbfunc e Delay_us _Delay_us fV
; time -> R16,R17
.even
_Delay_us::
.dbline -1
.dbline 12
; //ICC-AVR application builder : 2006-6-20 9:25:59
; // Target : M16
; // Crystal: 1Mhz
;
; #include <iom16v.h>
; #include <macros.h>
; #include "main.h"
;
; uint8 Buffer;
;
; void Delay_us(unsigned int time)
; {
L2:
.dbline 13
L3:
.dbline 13
; while(time--);
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L2
tst R3
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e Delay_ms _Delay_ms fV
; time -> R20,R21
.even
_Delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 17
; }
;
; void Delay_ms(unsigned int time)
; {
xjmp L7
L6:
.dbline 19
.dbline 20
ldi R16,10000
ldi R17,39
xcall _Delay_us
.dbline 21
L7:
.dbline 18
; while(time--)
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L6
tst R3
brne L6
X1:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 24
; {
; Delay_us(10000);
; }
; }
; void main(void)
; {
.dbline 25
; Delay_ms(1);
ldi R16,1
ldi R17,0
xcall _Delay_ms
.dbline 26
; SPI_SS_IN;
cbi 0x17,4
.dbline 26
sbi 0x18,4
.dbline 26
.dbline 27
; SPI_DO_OUT;
sbi 0x17,5
.dbline 27
.dbline 28
; SPI_DI_IN;
cbi 0x17,6
.dbline 28
sbi 0x18,6
.dbline 28
.dbline 29
; SPI_CLK_IN;
cbi 0x17,7
.dbline 29
sbi 0x18,7
.dbline 29
.dbline 31
;
; uart_init(); //TART初始化
xcall _uart_init
.dbline 32
; SEI(); //全局中断使能
sei
.dbline 35
;
;
; for(;;)
L10:
.dbline 36
.dbline 37
sbis 0x16,4
rjmp L10
.dbline 38
.dbline 40
ldi R16,240
xcall _Spi_Send
sts _Buffer,R16
.dbline 42
xcall _USART_TXD
.dbline 43
.dbline 44
.dbline 35
.dbline 35
xjmp L10
X2:
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart_init _uart_init fV
.even
_uart_init::
.dbline -1
.dbline 49
; {
; if(SS)
; {
;
; Buffer=Spi_Send(0XF0);
;
; USART_TXD(Buffer);
; }
; }
; }
;
; //===============================================================
; void uart_init(void) //UART初始化
; {
.dbline 52
; //设置侦格式
; //异步,8位数据,无奇偶校验,一个停止位,无倍速
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
ldi R24,134
out 0x20,R24
.dbline 55
;
; //设置波特率
; UBRRL= (F_osc/Baud_rate/16-1)%256;
ldi R24,25
out 0x9,R24
.dbline 56
; UBRRH= (F_osc/Baud_rate/16-1)/256;
clr R2
out 0x20,R2
.dbline 59
;
; //使能接收中断,使能接收,使能发送
; UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
ldi R24,152
out 0xa,R24
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e USART_TXD _USART_TXD fV
; data -> R16
.even
_USART_TXD::
.dbline -1
.dbline 65
; }
;
;
; //===============================================================
; void USART_TXD(uint8 data) //发送采用查询方式
; {
L18:
.dbline 66
L19:
.dbline 66
; while( !(UCSRA & BIT(UDRE)) );
sbis 0xb,5
rjmp L18
.dbline 67
; UDR=data;
out 0xc,R16
L21:
.dbline 68
L22:
.dbline 68
; while( !(UCSRA & BIT(TXC )) );
sbis 0xb,6
rjmp L21
.dbline 69
; UCSRA|=BIT(TXC);
sbi 0xb,6
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.area vector(rom, abs)
.org 44
jmp _USART_RXC
.area text(rom, con, rel)
.dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
.dbfunc e USART_RXC _USART_RXC fV
.even
_USART_RXC::
.dbline -1
.dbline 76
; }
;
; //=======================================================================
;
; #pragma interrupt_handler USART_RXC:12
; void USART_RXC(void)
; {
.dbline -2
L24:
.dbline 0 ; func end
reti
.dbend
.dbfunc e Spi_Send _Spi_Send fc
; temp -> R20
; i -> R22
; dat -> R16
.even
_Spi_Send::
xcall push_gset2
.dbline -1
.dbline 87
;
; }
;
; //*****************************************************************************************
; //函数名:Spi_send(uint8 dat)
; //输入:发送的数据
; //输出:无
; //功能描述:SPI从模式发送一个字节,先发送高位(发送的同时接收)
; //*****************************************************************************************
; uint8 Spi_Send(uint8 dat)
; {
.dbline 89
; uint8 i,temp;
; temp = 0;
clr R20
.dbline 91
;
; for(i=0; i<8; i++)
clr R22
xjmp L29
L26:
.dbline 92
; {
.dbline 93
; if(dat & 0x80)
sbrs R16,7
rjmp L30
.dbline 94
; {
.dbline 95
; MOSI_1;
sbi 0x18,5
.dbline 95
.dbline 96
; }
xjmp L31
L30:
.dbline 97
cbi 0x18,5
L31:
.dbline 97
; else MOSI_0;
.dbline 98
; dat <<= 1;
lsl R16
L32:
.dbline 99
L33:
.dbline 99
; while(!SCK);
sbis 0x16,7
rjmp L32
L35:
.dbline 100
L36:
.dbline 100
; while(SCK);
sbic 0x16,7
rjmp L35
.dbline 102
;
; temp <<= 1;
lsl R20
.dbline 103
; if(MISO)temp++;
sbis 0x16,6
rjmp L38
.dbline 103
inc R20
L38:
.dbline 105
L27:
.dbline 91
inc R22
L29:
.dbline 91
cpi R22,8
brlo L26
.dbline 106
;
; }
; return temp;
mov R16,R20
.dbline -2
L25:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r i 22 c
.dbsym r dat 16 c
.dbend
.area bss(ram, con, rel)
.dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
_Buffer::
.blkb 1
.dbsym e Buffer _Buffer c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -