📄 uart.s
字号:
.module uart.c
.area data(ram, con, rel)
_RC0::
.blkb 1
.area idata
.byte 76
.area data(ram, con, rel)
.dbfile E:\iccavr\无线+I2C\test1--uart\uart.c
.dbsym e RC0 _RC0 c
_RC1::
.blkb 1
.area idata
.byte 12
.area data(ram, con, rel)
.dbfile E:\iccavr\无线+I2C\test1--uart\uart.c
.dbsym e RC1 _RC1 c
_Add::
.blkb 1
.area idata
.byte 161
.area data(ram, con, rel)
.dbfile E:\iccavr\无线+I2C\test1--uart\uart.c
.dbsym e Add _Add c
.area vector(rom, abs)
.org 22
rjmp _uart0_rx_isr
.area data(ram, con, rel)
.dbfile E:\iccavr\无线+I2C\test1--uart\uart.c
.area text(rom, con, rel)
.dbfile E:\iccavr\无线+I2C\test1--uart\uart.c
.dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
_uart0_rx_isr::
rcall push_lset
.dbline -1
.dbline 72
; //*************************程序说明部分**************************************
; //本程序基于无线模块第3版(2005 12 13) 编写,通过MEGA8 与PTR8000
; //实现上位机与下位机之间的程序传输
; //主控制器MEGA8,晶振11.0592M
; //*************************管脚定义部分**************************************
; //SPI通讯部分
; //PB2----SS
; //PB3----MOSI
; //PB4----MISO
; //PB5----SCK
;
; //PTR8000控制引脚
; //PC0----CD----INPUT
; //PC1----AM----INPUT
; //PC2----DR----INPUT
; //PC3----PWR-----OUTPUT
; //PC4----TXEN----OUTPUT
; //PC5----TRXCE---OUTPUT
;
; //载波频率控制
; //PD2---PD7 ----6BIT频率选择
;
; //PB0----SPEAKER
; //PB1----LED
;
; //*************************头文件包含部分***********************************
; #include <iom8v.h>
; #include <macros.h>
; //*************************宏定义部分*****************************************
; #define WC 0x00 //Write configuration register Command
; #define RC 0x10 //Read configuration register Command
; #define WTP 0x20 //Write TX payload Command
; #define RTP 0x21 //Read TX payload Command
; #define WTA 0x22 //Write TX Address Command
; #define RTA 0x23 //Read TX Address Command
; #define RRP 0x24 //Read RX payload Command
;
; //*************************全局变量定义部分*******************************
; unsigned char Tran;
; unsigned char Recv;
; unsigned char RC0 = 0x4c,RC1 = 0x0c;
; unsigned char Add = 0xa1;
; //*************************函数定义部分**************************************
; void init_port(void); //初始化MEGA各控制引脚
;
; void Delay_1ms(void); //延时1ms函数
; void Delay_Nms(unsigned int i); //延时Nms函数
; void LED(unsigned char i); //点亮/熄灭LED
;
; //串口通讯用函数
; void Uart_Init(void); //UART初始化
; void Uart_Send(unsigned char c); //UART发送一个字符
;
;
; //SPI通讯用函数
; void SPI_MasterInit(void); //SPI主机初始化
; void SPI_M_Send(unsigned char c); //主机方式发送一个字符
; unsigned char SPI_M_Recv(unsigned char c); //主机接收一个字符
;
; //PTR8000用函数
; void PTR8_Standby(void); //set TRC_CE Disable
; void PTR8_TREN(void); //set TRX_CE Enable
; void PTR8_TX(void); //无线模块发送状态
; void PTR8_RX(void); //无线模块接收状态
; void Init_PTR8_CR(void); //初始化PTR8000控制状态
;
; void Init_Device(void); //初始化串口、SPI口及其他设备
;
; //******************************函数实现部分************************************
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; {
.dbline 73
; Recv = UDR;
in R2,0xc
sts _Recv,R2
.dbline 74
; Uart_Send(Recv);
mov R16,R2
rcall _Uart_Send
.dbline -2
.dbline 76
;
; }
L1:
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_port _init_port fV
.even
_init_port::
.dbline -1
.dbline 88
;
; /* 函数名: init_port
; 功能说明:初始化各MEGA8各控制引脚
; 参数说明:无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-23
; 修改时间:
; 修改内容: */
;
; void init_port(void)
; {
.dbline 89
; PORTB = 0x2f; //置PB0,PB1,PB2,PB3,PB5为1,PB4,PB6,PB7为0
ldi R24,47
out 0x18,R24
.dbline 90
; DDRB = 0x2f; //置PB0--SPK,PB1--LED,PB2--SS,PB3--MOSI,PB5--SCK为输出,PB4--MISO为输入
out 0x17,R24
.dbline 91
; PORTC = 0x18; //置PWR,TXEN为1, TRXCE为0
ldi R24,24
out 0x15,R24
.dbline 92
; DDRC = 0x38; //置PC0,PC1,PC2输入;PC3--PWR,PC4--TXEN,PC5--TRXCE输出
ldi R24,56
out 0x14,R24
.dbline 93
; PORTD = 0xff;
ldi R24,255
out 0x12,R24
.dbline 94
; DDRD = 0x00; //置PD口全部为输入,启动内部弱上拉
clr R2
out 0x11,R2
.dbline -2
.dbline 95
; }
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Delay_1ms _Delay_1ms fV
; i -> R16,R17
.even
_Delay_1ms::
.dbline -1
.dbline 107
; //**************************************************************************************
;
; /* 函数名: Delay_1ms
; 功能说明:软件延时1ms
; 参数说明:无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-06
; 修改时间:
; 修改内容: */
; void Delay_1ms(void)
; {
.dbline 109
; unsigned int i;
; for ( i = 0 ; i < ( unsigned int ) 11 * 143 - 2 ; i ++ )
clr R16
clr R17
rjmp L7
L4:
.dbline 110
L5:
.dbline 109
subi R16,255 ; offset = 1
sbci R17,255
L7:
.dbline 109
cpi R16,35
ldi R30,6
cpc R17,R30
brlo L4
.dbline -2
.dbline 111
; ;
; }
L3:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e Delay_Nms _Delay_Nms fV
; j -> R20,R21
; N -> R22,R23
.even
_Delay_Nms::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 123
; //******************************************************************
;
; /* 函数名: Delay_Nms
; 功能说明:软件延时Nms,适用于所有CPU
; 参数说明:N值决定延时长度。范围为0~65536之间的整数
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-06
; 修改时间:
; 修改内容: */
; void Delay_Nms(unsigned int N)
; {
.dbline 125
; unsigned int j;
; for( j = 0 ; j < N ; j ++ )
clr R20
clr R21
rjmp L12
L9:
.dbline 126
rcall _Delay_1ms
L10:
.dbline 125
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 125
cp R20,R22
cpc R21,R23
brlo L9
.dbline -2
.dbline 127
; Delay_1ms();
; }
L8:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 i
.dbsym r N 22 i
.dbend
.dbfunc e LED _LED fV
; i -> R16
.even
_LED::
.dbline -1
.dbline 140
; //*******************************************************************
;
; /* 函数名: LED
; 功能说明:点亮/熄灭LED
; 参数说明:0----点亮;1----熄灭
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-23
; 修改时间:
; 修改内容: */
;
; void LED(unsigned char i)
; {
.dbline 141
; if(i == 0)
tst R16
brne L14
.dbline 142
; PORTB &= ~BIT(PB1);
cbi 0x18,1
rjmp L15
L14:
.dbline 144
sbi 0x18,1
L15:
.dbline -2
.dbline 145
; else
; PORTB |= BIT(PB1);
; }
L13:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e Uart_Init _Uart_Init fV
.even
_Uart_Init::
.dbline -1
.dbline 161
;
; //*******************************************************************
;
; //串口通讯用函数
;
; /* 函数名: Uart_Init
; 功能说明:串口初始化函数,适用于所有CPU
; 波特率9600,8位字节,无奇偶校验
; 参数说明:无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-02
; 修改时间:
; 修改内容: */
; void Uart_Init(void)
; {
.dbline 162
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 163
; UCSRA = 0x00;
out 0xb,R2
.dbline 164
; UCSRC = 0x86;
ldi R24,134
out 0x20,R24
.dbline 165
; UBRRL = 0x47; //set baud rate lo
ldi R24,71
out 0x9,R24
.dbline 166
; UBRRH = 0x00; //set baud rate hi
out 0x20,R2
.dbline 167
; UCSRB = 0x98;
ldi R24,152
out 0xa,R24
.dbline -2
.dbline 168
; }
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Uart_Send _Uart_Send fV
; c -> R16
.even
_Uart_Send::
.dbline -1
.dbline 180
; //********************************************************************
;
; /* 函数名: Uart_Send
; 功能说明:通过查询方式,串口发送一个字节函数,适用于所有CPU
; 参数说明:c为所要发送的字节
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-02
; 修改时间:
; 修改内容: */
; void Uart_Send(unsigned char c)
; {
L18:
.dbline 182
L19:
.dbline 181
; while(!(UCSRA&(1<<UDRE)))
sbis 0xb,5
rjmp L18
.dbline 183
; ; //等待空闲
; UDR=c; //发送数据
out 0xc,R16
.dbline -2
.dbline 184
; }
L17:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e SPI_MasterInit _SPI_MasterInit fV
.even
_SPI_MasterInit::
.dbline -1
.dbline 203
;
;
; //**********************************************************************
;
; //SPI通讯用函数
;
; /* 函数名: SPI_MasterInit
; 功能说明:SPI主机初始化函数。使能SPI,MSB在前,主模式
; 起始上升沿,采样上升沿。16分频
; 参数说明: 无
; 返回值: 无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-02
; 修改时间:
; 修改内容: */
;
; void SPI_MasterInit(void)
; {
.dbline 204
; SPCR = 0x51; //SPI控制寄存器初始化:SPI允许,MSB先发,主模式,16分频
ldi R24,81
out 0xd,R24
.dbline -2
.dbline 205
; }
L21:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SPI_M_Send _SPI_M_Send fV
; c -> R16
.even
_SPI_M_Send::
.dbline -1
.dbline 218
; //**********************************************************************
; /* 函数名: SPI_M_Send
; 功能说明:SPI主机发送一个字节函数。
; 参数说明: c为要发送的字节
; 返回值: 无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-02
; 修改时间:2005-12-05
; 修改内容: 去掉SS信号控制语句 */
;
; void SPI_M_Send(unsigned char c)
; {
.dbline 219
; SPDR = c; //传送开始
out 0xf,R16
L23:
.dbline 221
L24:
.dbline 220
; while(!(SPSR & 0X80))
sbis 0xe,7
rjmp L23
.dbline -2
.dbline 223
; ; //查询SPIF标志
;
; }
L22:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -