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

📄 mt.lst

📁 PTR8000无线通信模块的单片机控制程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0001) 
(0002) /*函数的使用说明:
(0003) 1.该twi模块包含四种工作模式,主发,主收,从收,从发,其中主发由
(0004)   twiWriteByte(从机地址,要发送的数据)实现,主收由twiReadByte(从机地址)实现,从机
(0005)   的发送与接收均通过中断实现
(0006) 2.在从机模式下,需调用twi_init()来使能并初始化twi总线
(0007) 3.在主机模式下,调用twiWriteByte(从机地址,要发送的数据)向指定的从机写入数据,
(0008)   调用twiReadByte(从机地址)从指定的从机读取数据,然后可通过查询错误状态error_state
(0009)   的值决定下一步如何操作。
(0010) */
(0011) 
(0012) #include "twi.h"
(0013) 
(0014) //TWI同程序的接口参数
(0015) //receive_data,error_state不用设置
(0016) char receive_data=0;  		  // 接收到的数据
(0017) char error_state=0;   		  // twi错误状态
(0018) //以下三个参数根据需求进行设置
(0019) char slave_address=0xa0;      // 设置从机地址,Bits 7..1:存放从机地址,Bit 0:最低位为广播识别使能位
(0020) char bit_race=0x20;           // 设置主机模式的比特率,SCL=CPU频率/(16+2*(TWBR)*4TWPS),TWPS在4的指数位置
(0021) char send_data=0x02;     	  // 从机发送模式下从机向主机发送的数据
(0022) //要发送的数据
(0023) char trandata[num] = {0x00,0x01,0x02,0x03};
(0024) //*************************PTR8000全局变量**********************************
(0025) unsigned char Recv;
(0026) unsigned char RC0 = 0x4c,RC1 = 0x0c;//用于设置发送频率
(0027) unsigned char Add = 0xa1; //设置发送地址
(0028) //*************************** twi错误状态说明*********************************
(0029) // 0:twi传送无错误
(0030) // 1:在主发模式下,SLA+W已发送,返回NOT ACK
(0031) // 2:在主发模式下,DATA已发送,返回NOT ACK
(0032) // 3:在主发模式下,SLA+W或者数据的仲裁失败
(0033) // 4:在主收模式下,SLA+R或者数据的仲裁失败
(0034) // 5:在主收模式下,SLA+R已发送,返回NOT ACK
(0035) // 6:在主发模式下,START信号发送不成功
(0036) // 7:在主收模式下,START信号发送不成功
(0037) // 8:在主收模式下,数据接受完成
(0038) // 9:在主收模式下,数据接受不成功
(0039) //*****************************************************************************
(0040) 
(0041) 
(0042) //*************************函数定义部分**************************************
(0043) void port_init(void);			//初始化MEGA各控制引脚
(0044) 
(0045) void Delay_1ms(void);					//延时1ms函数
(0046) void Delay_Nms(unsigned int N);			//延时Nms函数
(0047) void LED(unsigned char i);			    //点亮/熄灭LED
(0048) 
(0049) //串口通讯用函数
(0050) void Uart_Init(void);					//UART初始化
(0051) void Uart_Send(unsigned char c);			//UART发送一个字符
(0052) 
(0053) 
(0054) //SPI通讯用函数
(0055) void SPI_MasterInit(void);	//SPI主机初始化
(0056) void SPI_M_Send(unsigned char c);	//主机方式发送一个字符
(0057) unsigned char  SPI_M_Recv(unsigned char c);	//主机接收一个字符
(0058) 
(0059) //PTR8000用函数
(0060) void PTR8_Standby(void);	//set TRC_CE Disable
(0061) void PTR8_TREN(void);		//set TRX_CE  Enable
(0062) void PTR8_TX(void);		//无线模块发送状态
(0063) void PTR8_RX(void);		//无线模块接收状态
(0064) void Init_PTR8_CR(void);	//初始化PTR8000控制状态
(0065) 
(0066) void Init_Device(void);	//初始化串口、SPI口及其他设备
(0067) 
(0068) //******************************函数实现部分************************************
(0069) 
(0070) //*************************** I/O 初始化****************************************
(0071) //******************************************************************************
(0072) /*	函数名:	init_port
(0073) 	功能说明:初始化各MEGA8各控制引脚
(0074) 	参数说明:无
(0075) 	函数作者:Haibo YU
(0076) 	版本号:	1.0
(0077) 	创建时间:2005-12-23
(0078) 	修改时间:
(0079) 	修改内容:				*/
(0080) void port_init(void)
(0081) {
(0082) 	PORTB = 0x2f;	//置PB0,PB1,PB2,PB3,PB5为1,PB4,PB6,PB7为0
_port_init:
    01E1 E28F      LDI	R24,0x2F
    01E2 BB88      OUT	0x18,R24
(0083) 	DDRB = 0x2f;	//置PB0,PB1,PB2--SS,PB3--MOSI,PB5--SCK为输出,PB4--MISO为输入
    01E3 BB87      OUT	0x17,R24
(0084) 	PORTC = 0x0f;   
    01E4 E08F      LDI	R24,0xF
    01E5 BB85      OUT	0x15,R24
(0085) 	DDRC  = 0x0f;	//PC4--SDA,PC5--SCL为输入,PC0--PC3全为输出以便测试
    01E6 BB84      OUT	0x14,R24
(0086) 	PORTD = 0x05;	//置PWR,TXEN为1,  TRXCE为0
    01E7 E085      LDI	R24,5
    01E8 BB82      OUT	0x12,R24
(0087) 	DDRD  = 0x07;	//置PD3,PD4,PD5输入;PD2--PWR,PD0--TXEN,PD1--TRXCE输出
    01E9 E087      LDI	R24,7
    01EA BB81      OUT	0x11,R24
(0088) }
    01EB 9508      RET
(0089) //**************************************************************************************
(0090) 
(0091) /*	函数名:	Delay_1ms
(0092) 	功能说明:软件延时1ms
(0093) 	参数说明:无
(0094) 	函数作者:Haibo YU
(0095) 	版本号:	1.0
(0096) 	创建时间:2005-12-06
(0097) 	修改时间:
(0098) 	修改内容:				*/
(0099) 	
(0100) void Delay_1ms(void)
(0101) {
(0102) 	unsigned int i;
(0103) 	for ( i = 0 ; i < ( unsigned int ) 11 * 143 - 2 ; i ++ )
_Delay_1ms:
  i                    --> R16
    01EC 2700      CLR	R16
    01ED 2711      CLR	R17
    01EE C002      RJMP	0x01F1
    01EF 5F0F      SUBI	R16,0xFF
    01F0 4F1F      SBCI	R17,0xFF
    01F1 3203      CPI	R16,0x23
    01F2 E0E6      LDI	R30,6
    01F3 071E      CPC	R17,R30
    01F4 F3D0      BCS	0x01EF
(0104) 		;
(0105) }
    01F5 9508      RET
_Delay_Nms:
  j                    --> R20
  N                    --> R22
    01F6 D0A0      RCALL	push_gset2
    01F7 01B8      MOVW	R22,R16
(0106) //******************************************************************
(0107) 
(0108) /*	函数名:	Delay_Nms
(0109) 	功能说明:软件延时Nms,适用于所有CPU
(0110) 	参数说明:N值决定延时长度。范围为0~65536之间的整数
(0111) 	函数作者:Haibo YU
(0112) 	版本号:	1.0
(0113) 	创建时间:2005-12-06
(0114) 	修改时间:
(0115) 	修改内容:				*/
(0116) void Delay_Nms(unsigned int N)
(0117) {
(0118) 	unsigned int j;
(0119) 	for( j = 0 ; j < N ; j ++ )
    01F8 2744      CLR	R20
    01F9 2755      CLR	R21
    01FA C003      RJMP	0x01FE
(0120) 		Delay_1ms();
    01FB DFF0      RCALL	_Delay_1ms
    01FC 5F4F      SUBI	R20,0xFF
    01FD 4F5F      SBCI	R21,0xFF
    01FE 1746      CP	R20,R22
    01FF 0757      CPC	R21,R23
    0200 F3D0      BCS	0x01FB
(0121) }
    0201 D078      RCALL	pop_gset2
    0202 9508      RET
(0122) //*******************************************************************
(0123) 
(0124) /*	函数名:	LED
(0125) 	功能说明:点亮/熄灭LED
(0126) 	参数说明:0----点亮;1----熄灭
(0127) 	函数作者:Haibo YU
(0128) 	版本号:	1.0
(0129) 	创建时间:2005-12-23
(0130) 	修改时间:
(0131) 	修改内容:				*/
(0132) 
(0133) void LED(unsigned char i)
(0134) {
(0135) 	if(i == 0)
_LED:
  i                    --> R16
    0203 2300      TST	R16
    0204 F411      BNE	0x0207
(0136) 		PORTB &= ~BIT(PB1);
    0205 98C1      CBI	0x18,1
    0206 C001      RJMP	0x0208
(0137) 	else
(0138) 		PORTB |= BIT(PB1);
    0207 9AC1      SBI	0x18,1
(0139) }
    0208 9508      RET
(0140) 
(0141) //*******************************************************************
(0142) 
(0143) //串口通讯用函数
(0144) 
(0145) /*	函数名:	Uart_Init
(0146) 	功能说明:串口初始化函数,适用于所有CPU
(0147) 					波特率9600,8位字节,无奇偶校验
(0148) 	参数说明:无
(0149) 	函数作者:Haibo YU
(0150) 	版本号:	1.0
(0151) 	创建时间:2005-12-02
(0152) 	修改时间:
(0153) 	修改内容:				*/
(0154) void Uart_Init(void)
(0155) {
(0156)  	UCSRB = 0x00; //disable while setting baud rate
_Uart_Init:
    0209 2422      CLR	R2
    020A B82A      OUT	0x0A,R2
(0157) 	UCSRA = 0x00;
    020B B82B      OUT	0x0B,R2
(0158)  	UCSRC = 0x86;
    020C E886      LDI	R24,0x86
    020D BD80      OUT	0x20,R24
(0159)  	UBRRL = 0x47; //set baud rate lo
    020E E487      LDI	R24,0x47
    020F B989      OUT	0x09,R24
(0160)  	UBRRH = 0x00; //set baud rate hi
    0210 BC20      OUT	0x20,R2
(0161)  	UCSRB = 0x98;
    0211 E988      LDI	R24,0x98
    0212 B98A      OUT	0x0A,R24
(0162) }
    0213 9508      RET
(0163) //********************************************************************
(0164) 
(0165) /*	函数名:	Uart_Send
(0166) 	功能说明:通过查询方式,串口发送一个字节函数,适用于所有CPU					
(0167) 	参数说明:c为所要发送的字节
(0168) 	函数作者:Haibo YU
(0169) 	版本号:	1.0
(0170) 	创建时间:2005-12-02
(0171) 	修改时间:
(0172) 	修改内容:				*/
(0173) void Uart_Send(unsigned char c)
(0174) {
(0175)  	while(!(UCSRA&(1<<UDRE)))
_Uart_Send:
  c                    --> R16
    0214 9B5D      SBIS	0x0B,5
    0215 CFFE      RJMP	_Uart_Send
(0176)   		;	//等待空闲
(0177)  	UDR=c;	//发送数据
    0216 B90C      OUT	0x0C,R16
(0178) }
    0217 9508      RET
_uart0_rx_isr:
    0218 D087      RCALL	push_lset
(0179) /*接收中断函数*/
(0180) #pragma interrupt_handler uart0_rx_isr:12
(0181) void uart0_rx_isr(void)
(0182) {
(0183)  	Recv = UDR;
    0219 B02C      IN	R2,0x0C
    021A 9220006C  STS	_Recv,R2
(0184) 	Uart_Send(Recv);//接收到的数据立即通过串口返回
    021C 2D02      MOV	R16,R2
    021D DFF6      RCALL	_Uart_Send
(0185) 	
(0186) }
    021E D098      RCALL	pop_lset
    021F 9518      RETI
(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:
    0220 E581      LDI	R24,0x51
    0221 B98D      OUT	0x0D,R24
(0205) }
    0222 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
    0223 B90F      OUT	0x0F,R16
(0220) 	while(!(SPSR & 0X80)) 
    0224 9B77      SBIS	0x0E,7
    0225 CFFE      RJMP	0x0224
(0221) 		;	//查询SPIF标志
(0222) 	
(0223) }
    0226 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
    0227 B90F      OUT	0x0F,R16
(0239) 	while(!(SPSR & 0X80)) 
    0228 9B77      SBIS	0x0E,7
    0229 CFFE      RJMP	0x0228
(0240) 		;	//查询SPIF标志
(0241) 	return SPDR;	//返回接收的字符
    022A B10F      IN	R16,0x0F
    022B 9508      RET
(0242) }
(0243) //*************************************************************************
(0244) 
(0245) //***************************PTR8000无线模块用函数*****************

⌨️ 快捷键说明

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