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

📄 uart.lst

📁 PTR8000无线通信模块的单片机控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0015 E5CF      LDI	R28,0x5F
    0016 E0D4      LDI	R29,4
    0017 BFCD      OUT	0x3D,R28
    0018 BFDE      OUT	0x3E,R29
    0019 51C0      SUBI	R28,0x10
    001A 40D0      SBCI	R29,0
    001B EA0A      LDI	R16,0xAA
    001C 8308      STD	Y+0,R16
    001D 2400      CLR	R0
    001E E6E3      LDI	R30,0x63
    001F E0F0      LDI	R31,0
    0020 E010      LDI	R17,0
    0021 36E5      CPI	R30,0x65
    0022 07F1      CPC	R31,R17
    0023 F011      BEQ	0x0026
    0024 9201      ST	R0,Z+
    0025 CFFB      RJMP	0x0021
    0026 8300      STD	Z+0,R16
    0027 E2E6      LDI	R30,0x26
    0028 E0F0      LDI	R31,0
    0029 E6A0      LDI	R26,0x60
    002A E0B0      LDI	R27,0
    002B E010      LDI	R17,0
    002C 32E9      CPI	R30,0x29
    002D 07F1      CPC	R31,R17
    002E F021      BEQ	0x0033
    002F 95C8      LPM
    0030 9631      ADIW	R30,1
    0031 920D      ST	R0,X+
    0032 CFF9      RJMP	0x002C
    0033 D081      RCALL	_main
_exit:
    0034 CFFF      RJMP	_exit
_uart0_rx_isr:
    0035 D0CF      RCALL	push_lset
FILE: E:\iccavr\无线+I2C\test1--uart\uart.c
(0001) //*************************程序说明部分**************************************
(0002) //本程序基于无线模块第3版(2005 12 13)  编写,通过MEGA8 与PTR8000
(0003) //实现上位机与下位机之间的程序传输
(0004) //主控制器MEGA8,晶振11.0592M
(0005) //*************************管脚定义部分**************************************
(0006) //SPI通讯部分
(0007) //PB2----SS
(0008) //PB3----MOSI
(0009) //PB4----MISO
(0010) //PB5----SCK
(0011) 
(0012) //PTR8000控制引脚
(0013) //PC0----CD----INPUT
(0014) //PC1----AM----INPUT
(0015) //PC2----DR----INPUT
(0016) //PC3----PWR-----OUTPUT
(0017) //PC4----TXEN----OUTPUT
(0018) //PC5----TRXCE---OUTPUT
(0019) 
(0020) //载波频率控制
(0021) //PD2---PD7   ----6BIT频率选择
(0022) 
(0023) //PB0----SPEAKER
(0024) //PB1----LED
(0025) 
(0026) //*************************头文件包含部分***********************************
(0027) #include <iom8v.h>
(0028) #include <macros.h>
(0029) //*************************宏定义部分*****************************************
(0030) #define 	WC 		0x00		//Write configuration register Command
(0031) #define  	RC 		0x10		//Read configuration register Command
(0032) #define 	WTP 	0x20		//Write TX payload Command
(0033) #define 	RTP 	0x21		//Read TX payload Command
(0034) #define 	WTA 	0x22		//Write TX Address Command
(0035) #define 	RTA 	0x23		//Read TX Address Command
(0036) #define 	RRP 	0x24		//Read RX payload Command
(0037) 
(0038) //*************************全局变量定义部分*******************************
(0039) unsigned char Tran;
(0040) unsigned char Recv;
(0041) unsigned char RC0 = 0x4c,RC1 = 0x0c;
(0042) unsigned char Add = 0xa1;
(0043) //*************************函数定义部分**************************************
(0044) void init_port(void);			//初始化MEGA各控制引脚
(0045) 
(0046) void Delay_1ms(void);					//延时1ms函数
(0047) void Delay_Nms(unsigned int i);			//延时Nms函数
(0048) void LED(unsigned char i);			    //点亮/熄灭LED
(0049) 
(0050) //串口通讯用函数
(0051) void Uart_Init(void);					//UART初始化
(0052) void Uart_Send(unsigned char c);			//UART发送一个字符
(0053) 
(0054) 
(0055) //SPI通讯用函数
(0056) void SPI_MasterInit(void);	//SPI主机初始化
(0057) void SPI_M_Send(unsigned char c);	//主机方式发送一个字符
(0058) unsigned char  SPI_M_Recv(unsigned char c);	//主机接收一个字符
(0059) 
(0060) //PTR8000用函数
(0061) void PTR8_Standby(void);	//set TRC_CE Disable
(0062) void PTR8_TREN(void);		//set TRX_CE  Enable
(0063) void PTR8_TX(void);		//无线模块发送状态
(0064) void PTR8_RX(void);		//无线模块接收状态
(0065) void Init_PTR8_CR(void);	//初始化PTR8000控制状态
(0066) 
(0067) void Init_Device(void);	//初始化串口、SPI口及其他设备
(0068) 
(0069) //******************************函数实现部分************************************
(0070) #pragma interrupt_handler uart0_rx_isr:12
(0071) void uart0_rx_isr(void)
(0072) {
(0073)  	Recv = UDR;
    0036 B02C      IN	R2,0x0C
    0037 92200063  STS	_Recv,R2
(0074) 	Uart_Send(Recv);
    0039 2D02      MOV	R16,R2
    003A D036      RCALL	_Uart_Send
(0075) 	
(0076) }
    003B D0E0      RCALL	pop_lset
    003C 9518      RETI
(0077) 
(0078) /*	函数名:	init_port
(0079) 	功能说明:初始化各MEGA8各控制引脚
(0080) 	参数说明:无
(0081) 	函数作者:Haibo YU
(0082) 	版本号:	1.0
(0083) 	创建时间:2005-12-23
(0084) 	修改时间:
(0085) 	修改内容:				*/
(0086) 
(0087) void init_port(void)
(0088) {
(0089) 	PORTB = 0x2f;		//置PB0,PB1,PB2,PB3,PB5为1,PB4,PB6,PB7为0
_init_port:
    003D E28F      LDI	R24,0x2F
    003E BB88      OUT	0x18,R24
(0090) 	DDRB = 0x2f;		//置PB0--SPK,PB1--LED,PB2--SS,PB3--MOSI,PB5--SCK为输出,PB4--MISO为输入
    003F BB87      OUT	0x17,R24
(0091) 	PORTC = 0x18;		//置PWR,TXEN为1,  TRXCE为0
    0040 E188      LDI	R24,0x18
    0041 BB85      OUT	0x15,R24
(0092) 	DDRC = 0x38;		//置PC0,PC1,PC2输入;PC3--PWR,PC4--TXEN,PC5--TRXCE输出
    0042 E388      LDI	R24,0x38
    0043 BB84      OUT	0x14,R24
(0093) 	PORTD = 0xff;
    0044 EF8F      LDI	R24,0xFF
    0045 BB82      OUT	0x12,R24
(0094) 	DDRD = 0x00;		//置PD口全部为输入,启动内部弱上拉
    0046 2422      CLR	R2
    0047 BA21      OUT	0x11,R2
(0095) }
    0048 9508      RET
(0096) //**************************************************************************************
(0097) 
(0098) /*	函数名:	Delay_1ms
(0099) 	功能说明:软件延时1ms
(0100) 	参数说明:无
(0101) 	函数作者:Haibo YU
(0102) 	版本号:	1.0
(0103) 	创建时间:2005-12-06
(0104) 	修改时间:
(0105) 	修改内容:				*/
(0106) void Delay_1ms(void)
(0107) {
(0108) 	unsigned int i;
(0109) 	for ( i = 0 ; i < ( unsigned int ) 11 * 143 - 2 ; i ++ )
_Delay_1ms:
  i                    --> R16
    0049 2700      CLR	R16
    004A 2711      CLR	R17
    004B C002      RJMP	0x004E
    004C 5F0F      SUBI	R16,0xFF
    004D 4F1F      SBCI	R17,0xFF
    004E 3203      CPI	R16,0x23
    004F E0E6      LDI	R30,6
    0050 071E      CPC	R17,R30
    0051 F3D0      BCS	0x004C
(0110) 		;
(0111) }
    0052 9508      RET
_Delay_Nms:
  j                    --> R20
  N                    --> R22
    0053 D0AE      RCALL	push_gset2
    0054 01B8      MOVW	R22,R16
(0112) //******************************************************************
(0113) 
(0114) /*	函数名:	Delay_Nms
(0115) 	功能说明:软件延时Nms,适用于所有CPU
(0116) 	参数说明:N值决定延时长度。范围为0~65536之间的整数
(0117) 	函数作者:Haibo YU
(0118) 	版本号:	1.0
(0119) 	创建时间:2005-12-06
(0120) 	修改时间:
(0121) 	修改内容:				*/
(0122) void Delay_Nms(unsigned int N)
(0123) {
(0124) 	unsigned int j;
(0125) 	for( j = 0 ; j < N ; j ++ )
    0055 2744      CLR	R20
    0056 2755      CLR	R21
    0057 C003      RJMP	0x005B
(0126) 		Delay_1ms();
    0058 DFF0      RCALL	_Delay_1ms
    0059 5F4F      SUBI	R20,0xFF
    005A 4F5F      SBCI	R21,0xFF
    005B 1746      CP	R20,R22
    005C 0757      CPC	R21,R23
    005D F3D0      BCS	0x0058
(0127) }
    005E D08A      RCALL	pop_gset2
    005F 9508      RET
(0128) //*******************************************************************
(0129) 
(0130) /*	函数名:	LED
(0131) 	功能说明:点亮/熄灭LED
(0132) 	参数说明:0----点亮;1----熄灭
(0133) 	函数作者:Haibo YU
(0134) 	版本号:	1.0
(0135) 	创建时间:2005-12-23
(0136) 	修改时间:
(0137) 	修改内容:				*/
(0138) 
(0139) void LED(unsigned char i)
(0140) {
(0141) 	if(i == 0)
_LED:
  i                    --> R16
    0060 2300      TST	R16
    0061 F411      BNE	0x0064
(0142) 		PORTB &= ~BIT(PB1);
    0062 98C1      CBI	0x18,1
    0063 C001      RJMP	0x0065
(0143) 	else
(0144) 		PORTB |= BIT(PB1);
    0064 9AC1      SBI	0x18,1
(0145) }
    0065 9508      RET
(0146) 
(0147) //*******************************************************************
(0148) 
(0149) //串口通讯用函数
(0150) 
(0151) /*	函数名:	Uart_Init
(0152) 	功能说明:串口初始化函数,适用于所有CPU
(0153) 					波特率9600,8位字节,无奇偶校验
(0154) 	参数说明:无
(0155) 	函数作者:Haibo YU
(0156) 	版本号:	1.0
(0157) 	创建时间:2005-12-02
(0158) 	修改时间:
(0159) 	修改内容:				*/
(0160) void Uart_Init(void)
(0161) {
(0162)  	UCSRB = 0x00; //disable while setting baud rate
_Uart_Init:
    0066 2422      CLR	R2
    0067 B82A      OUT	0x0A,R2
(0163) 	UCSRA = 0x00;
    0068 B82B      OUT	0x0B,R2
(0164)  	UCSRC = 0x86;
    0069 E886      LDI	R24,0x86
    006A BD80      OUT	0x20,R24
(0165)  	UBRRL = 0x47; //set baud rate lo
    006B E487      LDI	R24,0x47
    006C B989      OUT	0x09,R24
(0166)  	UBRRH = 0x00; //set baud rate hi
    006D BC20      OUT	0x20,R2
(0167)  	UCSRB = 0x98;
    006E E988      LDI	R24,0x98
    006F B98A      OUT	0x0A,R24
(0168) }
    0070 9508      RET
(0169) //********************************************************************
(0170) 
(0171) /*	函数名:	Uart_Send
(0172) 	功能说明:通过查询方式,串口发送一个字节函数,适用于所有CPU					
(0173) 	参数说明:c为所要发送的字节
(0174) 	函数作者:Haibo YU
(0175) 	版本号:	1.0
(0176) 	创建时间:2005-12-02
(0177) 	修改时间:
(0178) 	修改内容:				*/
(0179) void Uart_Send(unsigned char c)
(0180) {
(0181)  	while(!(UCSRA&(1<<UDRE)))
_Uart_Send:
  c                    --> R16
    0071 9B5D      SBIS	0x0B,5
    0072 CFFE      RJMP	_Uart_Send
(0182)   		;	//等待空闲
(0183)  	UDR=c;	//发送数据
    0073 B90C      OUT	0x0C,R16
(0184) }
    0074 9508      RET
(0185) 
(0186) 
(0187) //**********************************************************************
(0188) 
(0189) //SPI通讯用函数
(0190) 
(0191) /*	函数名:	SPI_MasterInit
(0192) 	功能说明:SPI主机初始化函数。使能SPI,MSB在前,主模式
(0193) 					起始上升沿,采样上升沿。16分频
(0194) 	参数说明:	无
(0195) 	返回值:	无
(0196) 	函数作者:Haibo YU
(0197) 	版本号:	1.0
(0198) 	创建时间:2005-12-02
(0199) 	修改时间:
(0200) 	修改内容:				*/
(0201) 
(0202) void SPI_MasterInit(void)
(0203) {
(0204) 	SPCR = 0x51;		//SPI控制寄存器初始化:SPI允许,MSB先发,主模式,16分频
_SPI_MasterInit:
    0075 E581      LDI	R24,0x51
    0076 B98D      OUT	0x0D,R24
(0205) }
    0077 9508      RET
(0206) //**********************************************************************
(0207) /*	函数名:	SPI_M_Send
(0208) 	功能说明:SPI主机发送一个字节函数。
(0209) 	参数说明:	c为要发送的字节
(0210) 	返回值:	无
(0211) 	函数作者:Haibo YU
(0212) 	版本号:	1.0
(0213) 	创建时间:2005-12-02
(0214) 	修改时间:2005-12-05
(0215) 	修改内容:	去掉SS信号控制语句	*/
(0216) 
(0217) void SPI_M_Send(unsigned char c)
(0218) {
(0219) 	SPDR = c;	//传送开始
_SPI_M_Send:
  c                    --> R16
    0078 B90F      OUT	0x0F,R16
(0220) 	while(!(SPSR & 0X80)) 
    0079 9B77      SBIS	0x0E,7
    007A CFFE      RJMP	0x0079
(0221) 		;	//查询SPIF标志
(0222) 	
(0223) }
    007B 9508      RET
(0224) //************************************************************************
(0225) 
(0226) /*	函数名:	SPI_M_Recv
(0227) 	功能说明:SPI主机方式接收一个字节函数。
(0228) 	参数说明:任意无效字符
(0229) 	返回值:	返回接收到的字节
(0230) 	函数作者:Haibo YU
(0231) 	版本号:	1.0
(0232) 	创建时间:2005-12-06
(0233) 	修改时间:
(0234) 	修改内容:				*/
(0235) 
(0236) unsigned char SPI_M_Recv(unsigned char c)
(0237) {
(0238) 	SPDR = c;	//传送开始
_SPI_M_Recv:
  c                    --> R16
    007C B90F      OUT	0x0F,R16
(0239) 	while(!(SPSR & 0X80)) 
    007D 9B77      SBIS	0x0E,7
    007E CFFE      RJMP	0x007D
(0240) 		;	//查询SPIF标志

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -