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

📄 uart.s

📁 PTR8000无线通信模块的单片机控制程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -