📄 uart.s
字号:
.dbfunc e SPI_M_Recv _SPI_M_Recv fc
; c -> R16
.even
_SPI_M_Recv::
.dbline -1
.dbline 237
; //************************************************************************
;
; /* 函数名: SPI_M_Recv
; 功能说明:SPI主机方式接收一个字节函数。
; 参数说明:任意无效字符
; 返回值: 返回接收到的字节
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-06
; 修改时间:
; 修改内容: */
;
; unsigned char SPI_M_Recv(unsigned char c)
; {
.dbline 238
; SPDR = c; //传送开始
out 0xf,R16
L27:
.dbline 240
L28:
.dbline 239
; while(!(SPSR & 0X80))
sbis 0xe,7
rjmp L27
.dbline 241
; ; //查询SPIF标志
; return SPDR; //返回接收的字符
in R16,0xf
.dbline -2
L26:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e PTR8_Standby _PTR8_Standby fV
.even
_PTR8_Standby::
.dbline -1
.dbline 258
; }
; //*************************************************************************
;
; //***************************PTR8000无线模块用函数*****************
;
; /* 函数名: PTR8_Standby
; 功能说明:将PTR8置为待机状态。SET TRX_CE = 0
; 参数说明:无
; 返回值: 无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-23
; 修改时间:
; 修改内容: */
;
; void PTR8_Standby(void)
; {
.dbline 259
; PORTC &= ~BIT(PC5); //TRX_CE = 0
cbi 0x15,5
.dbline -2
.dbline 260
; }
L30:
.dbline 0 ; func end
ret
.dbend
.dbfunc e PTR8_TREN _PTR8_TREN fV
.even
_PTR8_TREN::
.dbline -1
.dbline 274
; //**************************************************************************
;
; /* 函数名: PTR8_TREN
; 功能说明:将PTR8置为工作状态。SET TRX_CE = 1
; 参数说明:无
; 返回值: 无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-23
; 修改时间:
; 修改内容: */
;
; void PTR8_TREN(void)
; {
.dbline 275
; PORTC |= BIT(PC5); //TRX_CE = 1
sbi 0x15,5
.dbline -2
.dbline 276
; }
L31:
.dbline 0 ; func end
ret
.dbend
.dbfunc e PTR8_TX _PTR8_TX fV
.even
_PTR8_TX::
.dbline -1
.dbline 290
; //***************************************************************************
;
; /* 函数名: PTR8_TX
; 功能说明:将PTR8置为发送状态。
; 参数说明:无
; 返回值: 无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-23
; 修改时间:
; 修改内容: */
;
; void PTR8_TX(void)
; {
.dbline 291
; PORTC |= BIT(PC4); //TX_EN = 1
sbi 0x15,4
.dbline -2
.dbline 292
; }
L32:
.dbline 0 ; func end
ret
.dbend
.dbfunc e PTR8_RX _PTR8_RX fV
.even
_PTR8_RX::
.dbline -1
.dbline 306
; //***************************************************************************
;
; /* 函数名: PTR8_RX
; 功能说明:将PTR8置为接收状态。
; 参数说明:无
; 返回值: 无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-23
; 修改时间:
; 修改内容: */
;
; void PTR8_RX(void)
; {
.dbline 307
; PORTC &= ~BIT(PC4); //TX_EN = 0
cbi 0x15,4
.dbline -2
.dbline 308
; }
L33:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Init_PTR8_CR _Init_PTR8_CR fV
.even
_Init_PTR8_CR::
.dbline -1
.dbline 312
; //*****************************************************************************
;
; void Init_PTR8_CR(void)
; {
.dbline 313
; PORTB &= ~BIT(PB2); //SS SET LOW, Write Configuration register Start
cbi 0x18,2
.dbline 314
; SPI_M_Send(WC); //Wirte Configuration Register,Start From 0000
clr R16
rcall _SPI_M_Send
.dbline 315
; SPI_M_Send(RC0); //Write CH_NO [7 : 0]
lds R16,_RC0
rcall _SPI_M_Send
.dbline 316
; SPI_M_Send(RC1); //Write Byte 2
lds R16,_RC1
rcall _SPI_M_Send
.dbline 317
; SPI_M_Send(0x44);
ldi R16,68
rcall _SPI_M_Send
.dbline 318
; SPI_M_Send(0x01); //RX payload = 1 byte
ldi R16,1
rcall _SPI_M_Send
.dbline 319
; SPI_M_Send(0x01); //TX payload = 1 byte
ldi R16,1
rcall _SPI_M_Send
.dbline 320
; SPI_M_Send(Add);
lds R16,_Add
rcall _SPI_M_Send
.dbline 321
; SPI_M_Send(Add);
lds R16,_Add
rcall _SPI_M_Send
.dbline 322
; SPI_M_Send(Add);
lds R16,_Add
rcall _SPI_M_Send
.dbline 323
; SPI_M_Send(Add);
lds R16,_Add
rcall _SPI_M_Send
.dbline 324
; SPI_M_Send(0x58);
ldi R16,88
rcall _SPI_M_Send
.dbline 325
; PORTB |= BIT(PB2); //SS set HIGH,Write Configuration Register Finish
sbi 0x18,2
.dbline -2
.dbline 327
;
; }
L34:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Init_Device _Init_Device fV
.even
_Init_Device::
.dbline -1
.dbline 340
; //************************************************************************************
; /* 函数名: Init_Device
; 功能说明:初始化设备。LED亮一下,蜂鸣器叫一声,初始化串口
; 参数说明:无
; 返回值: 无
; 函数作者:Haibo YU
; 版本号: 1.0
; 创建时间:2005-12-23
; 修改时间:
; 修改内容: */
;
; void Init_Device(void)
; {
.dbline 342
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 344
;
; init_port(); //初始化各控制端口
rcall _init_port
.dbline 345
; LED(0); //LED全亮
clr R16
rcall _LED
.dbline 346
; Uart_Init(); //串口初始化
rcall _Uart_Init
.dbline 347
; SPI_MasterInit();//SPI Master Init
rcall _SPI_MasterInit
.dbline 348
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 349
; GICR = 0x00;
out 0x3b,R2
.dbline 350
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 352
;
; SEI(); //re-enable interrupts
sei
.dbline 353
; LED(1); //LED全灭
ldi R16,1
.dbline -2
.dbline 355
; //all peripherals are now initialised
; }
L35:
.dbline 0 ; func end
rjmp _LED
.dbend
.dbfunc e main _main fV
; F -> <dead>
; dr -> R20
; i -> R22
.even
_main::
.dbline -1
.dbline 366
;
; //**************************************************************************
;
;
; //****************************主程序**********************************
; /*无线模块发送程序,无线模块发送的字符为通过串口接收的字符,规定为0和1,而且每次数据发送
; 成功LED都会闪一次*/
; //********************发送程序**********************
;
; void main(void)
; {
.dbline 368
; unsigned char i,dr,F;
; Init_Device(); //Init All Device
rcall _Init_Device
.dbline 370
;
; Init_PTR8_CR(); //Set Configuration register
rcall _Init_PTR8_CR
.dbline 371
; Delay_1ms();
rcall _Delay_1ms
.dbline 373
;
; PTR8_RX(); //Set RX mode
rcall _PTR8_RX
.dbline 374
; PTR8_TREN(); // TRX_CE = 1 Enable RX
rcall _PTR8_TREN
.dbline 375
; Delay_1ms();
rcall _Delay_1ms
rjmp L38
L37:
.dbline 377
; while(1)
; {
.dbline 378
; LED(1);
ldi R16,1
rcall _LED
.dbline 379
; Delay_Nms(1000);
ldi R16,1000
ldi R17,3
rcall _Delay_Nms
.dbline 381
;
; PTR8_TX(); //set TX mode
rcall _PTR8_TX
.dbline 382
; Delay_1ms();
rcall _Delay_1ms
.dbline 383
; PORTB &= ~BIT(PB2); //SS = 0
cbi 0x18,2
.dbline 384
; SPI_M_Send(WTP); //Write TX payload
ldi R16,32
rcall _SPI_M_Send
.dbline 386
;
; SPI_M_Send(Recv); // Data = Recv[]
lds R16,_Recv
rcall _SPI_M_Send
.dbline 388
;
; PORTB |= BIT(PB2); //ss = 1
sbi 0x18,2
.dbline 389
; Delay_1ms();
rcall _Delay_1ms
.dbline 390
; PORTB &= ~BIT(PB2); //SS = 0
cbi 0x18,2
.dbline 391
; SPI_M_Send(WTA); //write TX_Address
ldi R16,34
rcall _SPI_M_Send
.dbline 392
; for(i = 0 ; i < 4 ; i ++)
clr R22
rjmp L43
L40:
.dbline 393
.dbline 394
lds R16,_Add
rcall _SPI_M_Send
.dbline 395
L41:
.dbline 392
inc R22
L43:
.dbline 392
cpi R22,4
brlo L40
.dbline 396
; {
; SPI_M_Send(Add); //TX_Address = Add
; }
; PORTB |= BIT(PB2); //ss = 1
sbi 0x18,2
.dbline 397
; Delay_1ms();
rcall _Delay_1ms
.dbline 398
; PTR8_TREN(); //TRX_CE = 1 Enable TX
rcall _PTR8_TREN
L44:
.dbline 400
; do
; dr = (PINC & 0x04);
in R20,0x13
andi R20,4
L45:
.dbline 401
tst R20
breq L44
.dbline 402
rcall _PTR8_Standby
.dbline 403
rcall _Delay_1ms
.dbline 405
clr R16
rcall _LED
.dbline 406
ldi R16,1000
ldi R17,3
rcall _Delay_Nms
.dbline 408
rcall _PTR8_RX
.dbline 409
rcall _PTR8_TREN
.dbline 410
rcall _Delay_1ms
.dbline 414
L38:
.dbline 376
rjmp L37
X0:
.dbline -2
.dbline 415
; while(dr == 0); //等待数据发送成功
; PTR8_Standby(); //TRX_CE = 0 disable TX
; Delay_1ms();
;
; LED(0);
; Delay_Nms(1000);
;
; PTR8_RX(); //Set RX mode
; PTR8_TREN(); // TRX_CE = 1 Enable RX
; Delay_1ms();
;
;
;
; }
; }
L36:
.dbline 0 ; func end
ret
.dbsym l F 1 c
.dbsym r dr 20 c
.dbsym r i 22 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\iccavr\无线+I2C\test1--uart\uart.c
_Recv::
.blkb 1
.dbsym e Recv _Recv c
_Tran::
.blkb 1
.dbsym e Tran _Tran c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -