📄 jifeng_jieshou.s
字号:
.dbline 203
; }
; //--------------------------------系统状态初始化--------------------------------
; void system_Init(void)
; {
.dbline 205
;
; Hign_nrf905_CSN; // SPI使能
sbi 0x18,4
.dbline 205
.dbline 206
; Low_nrf905_SCK;
cbi 0x18,7
.dbline 206
.dbline 207
; Low_nrf905_DR; // DR=0
cbi 0x18,2
.dbline 207
.dbline 208
; Low_nrf905_AM; // AM=0
cbi 0x18,3
.dbline 208
.dbline 209
; Low_nrf905_CD; // CD=0
cbi 0x12,4
.dbline 209
.dbline 210
; Hign_nrf905_PWR; // PWR=1
sbi 0x18,1
.dbline 210
.dbline 211
; Low_nrf905_TRX_CE; // nrf905_TRX_CE=0
cbi 0x12,5
.dbline 211
.dbline 212
; Low_nrf905_TX_EN ; // nrf905_TX_EN=0
cbi 0x18,0
.dbline 212
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Config905 _Config905 fV
; i -> R20
.even
_Config905::
rcall push_gset1
.dbline -1
.dbline 216
; }
; //--------------------------------NRF905寄存器初始化函数------------------------
; void Config905(void)
; {
.dbline 218
; uchar i;
; Low_nrf905_CSN; //SPI使能
cbi 0x18,4
.dbline 218
.dbline 219
; Delay(1);
ldi R16,1
ldi R17,0
rcall _Delay
.dbline 220
; for (i=0;i<11;i++) //碞RF905配置字
clr R20
rjmp L19
L16:
.dbline 221
.dbline 222
ldi R24,<_RFConf
ldi R25,>_RFConf
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _SpiReadSpiWrite
.dbline 223
L17:
.dbline 220
inc R20
L19:
.dbline 220
cpi R20,11
brlo L16
.dbline 224
; {
; SpiReadSpiWrite(RFConf[i]);
; }
; Hign_nrf905_CSN; // Disable Spi
sbi 0x18,4
.dbline 224
.dbline -2
L15:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e TxPacket _TxPacket fV
; i -> R20
.even
_TxPacket::
rcall push_gset1
.dbline -1
.dbline 228
; }
; //--------------------------------NRF905待发数据打包----------------------------
; void TxPacket(void)
; {
.dbline 230
; uchar i;
; Low_nrf905_CSN; // 使能Spi,允许对nrf905进行读写操作
cbi 0x18,4
.dbline 230
.dbline 231
; Delay(1);
ldi R16,1
ldi R17,0
rcall _Delay
.dbline 232
; SpiReadSpiWrite(WTP); // 写数据前先写写数据命令
ldi R16,32
rcall _SpiReadSpiWrite
.dbline 233
; for (i=0;i<32;i++)
clr R20
rjmp L24
L21:
.dbline 234
.dbline 235
ldi R24,<_TxRxBuffer
ldi R25,>_TxRxBuffer
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _SpiReadSpiWrite
.dbline 236
L22:
.dbline 233
inc R20
L24:
.dbline 233
cpi R20,32
brlo L21
.dbline 237
; {
; SpiReadSpiWrite(TxRxBuffer[i]); // 待发送的32字节数据
; }
; Hign_nrf905_CSN;
sbi 0x18,4
.dbline 237
.dbline 238
; Delay(1); // 关闭Spi,不允许对nrf905进行读写操作
ldi R16,1
ldi R17,0
rcall _Delay
.dbline 239
; Low_nrf905_CSN; // 使能Spi
cbi 0x18,4
.dbline 239
.dbline 240
; SpiReadSpiWrite(WTA); // 写地址前首先先写地址命令
ldi R16,34
rcall _SpiReadSpiWrite
.dbline 241
; for (i=0;i<4;i++) // 写入4 bytes 接收地址
clr R20
rjmp L28
L25:
.dbline 242
.dbline 243
ldi R24,<_TxAddress
ldi R25,>_TxAddress
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _SpiReadSpiWrite
.dbline 244
L26:
.dbline 241
inc R20
L28:
.dbline 241
cpi R20,4
brlo L25
.dbline 245
; {
; SpiReadSpiWrite(TxAddress[i]);
; }
; Hign_nrf905_CSN; // 关闭Spi
sbi 0x18,4
.dbline 245
.dbline 246
; Hign_nrf905_TRX_CE; // Set TRX_CE high,start Tx data transmission
sbi 0x12,5
.dbline 246
.dbline 247
; Delay(1); // 等待DR变高
ldi R16,1
ldi R17,0
rcall _Delay
.dbline 248
; Low_nrf905_TRX_CE; // 设置TRX_CE=0
cbi 0x12,5
.dbline 248
.dbline -2
L20:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e SetTxMode _SetTxMode fV
.even
_SetTxMode::
.dbline -1
.dbline 252
; }
; //------------------------------设置发送模式------------------------------------
; void SetTxMode(void)
; {
.dbline 253
; Low_nrf905_TRX_CE; //
cbi 0x12,5
.dbline 253
.dbline 254
; Hign_nrf905_TX_EN; //发送使能
sbi 0x18,0
.dbline 254
.dbline 255
; Delay(2); // delay for mode change(>=650us)
ldi R16,2
ldi R17,0
rcall _Delay
.dbline -2
L29:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SetRxMode _SetRxMode fV
.even
_SetRxMode::
.dbline -1
.dbline 259
; }
; //------------------------------设置接收模式激发--------------------------------
; void SetRxMode(void)
; {
.dbline 260
; Low_nrf905_TX_EN;
cbi 0x18,0
.dbline 260
.dbline 261
; Hign_nrf905_TRX_CE;
sbi 0x12,5
.dbline 261
.dbline 262
; Delay(10); // delay for mode change(>=650us)
ldi R16,10
ldi R17,0
rcall _Delay
.dbline -2
L30:
.dbline 0 ; func end
ret
.dbend
.dbfunc e TX _TX fV
.even
_TX::
.dbline -1
.dbline 266
; }
; //------------------------------发送数据----------------------------------------
; void TX(void)
; {
.dbline 267
; SetTxMode(); // Set nRF905 in Tx mode
rcall _SetTxMode
.dbline 268
; TxPacket(); // Send data by nRF905
rcall _TxPacket
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbend
.dbfunc e CheckDR _CheckDR fc
.even
_CheckDR::
.dbline -1
.dbline 272
; }
; //-----------------------------判断是否收到数据---------------------------------
; unsigned char CheckDR(void) //检查是否有新数据传入
; {
.dbline 273
; if (PINB & (1 << PB2))
sbis 0x16,2
rjmp L33
.dbline 274
; {
.dbline 275
; return 1; //收到数据
ldi R16,1
rjmp L32
L33:
.dbline 278
; }
; else
; {
.dbline 279
; return 0;
clr R16
.dbline -2
L32:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RxPacket _RxPacket fV
; i -> R20
.even
_RxPacket::
rcall push_gset1
.dbline -1
.dbline 284
; }
; }
; //-----------------------------------读接收数据包-------------------------------
; void RxPacket(void) //读数据
; {
.dbline 286
; uchar i;
; Low_nrf905_TRX_CE;
cbi 0x12,5
.dbline 286
.dbline 287
; Low_nrf905_CSN; // 使能SPI
cbi 0x18,4
.dbline 287
.dbline 288
; Delay(1);
ldi R16,1
ldi R17,0
rcall _Delay
.dbline 289
; SpiReadSpiWrite(RRP); // 写入数据接收缓冲区数据命令
ldi R16,36
rcall _SpiReadSpiWrite
.dbline 290
; for (i = 0 ;i < 4 ;i++)
clr R20
rjmp L39
L36:
.dbline 291
.dbline 292
clr R16
rcall _SpiReadSpiWrite
ldi R24,<_TxRxBuffer
ldi R25,>_TxRxBuffer
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 293
L37:
.dbline 290
inc R20
L39:
.dbline 290
cpi R20,4
brlo L36
.dbline 294
; {
; TxRxBuffer[i]=SpiReadSpiWrite(0); // 读取数据接收缓冲区数据
; }
; Hign_nrf905_CSN;
sbi 0x18,4
.dbline 294
.dbline 295
; Delay(2); //
ldi R16,2
ldi R17,0
rcall _Delay
.dbline 296
; Hign_nrf905_TRX_CE;
sbi 0x12,5
.dbline 296
.dbline -2
L35:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e RX _RX fV
.even
_RX::
.dbline -1
.dbline 300
; }
; //--------------------------------设置接收模式----------------------------------
; void RX(void)
; {
.dbline 301
; SetRxMode(); //设置NRF905接收模式
rcall _SetRxMode
L41:
.dbline 302
L42:
.dbline 302
; while (CheckDR()==0); //等待接收完成
rcall _CheckDR
tst R16
breq L41
.dbline 303
; RxPacket(); //读取接收数据缓冲区
rcall _RxPacket
.dbline 304
; Delay(10);
ldi R16,10
ldi R17,0
rcall _Delay
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LCD_Delay _LCD_Delay fV
; i -> R20,R21
; time -> R16,R17
.even
_LCD_Delay::
rcall push_gset1
.dbline -1
.dbline 311
; }
; //******************************************************************************
; //以下为LCD驱动
; //******************************************************************************
; //------------------------------------------------------------------------------
; void LCD_Delay(uint time)
; {
.dbline 313
mov R20,R16
mov R21,R17
rjmp L48
L45:
.dbline 313
L46:
.dbline 313
subi R20,1
sbci R21,0
L48:
.dbline 313
; uint i;
; for(i=time;i>0;i--);
cpi R20,0
cpc R20,R21
brne L45
X1:
.dbline -2
L44:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.dbfunc e Lcd_init _Lcd_init fV
.even
_Lcd_init::
.dbline -1
.dbline 317
; }
; //---------------------------LCD初始化---------------------------------------
; void Lcd_init(void)
; {
.dbline 318
; DDRC=0xF8;
ldi R24,248
out 0x14,R24
.dbline 320
; //ASSR &= ~(1 <<AS2);
; Hign_LCD_CS;
sbi 0x15,7
.dbline 320
.dbline 321
; Low_LCD_RESET; //硬复位
cbi 0x15,6
.dbline 321
.dbline 322
; LCD_Delay(50);
ldi R16,50
ldi R17,0
rcall _LCD_Delay
.dbline 323
; Hign_LCD_RESET;
sbi 0x15,6
.dbline 323
.dbline 325
; ////////////////////////////////////////////////////////
; Lcd_Write_command(0xe2); //软复位RESet:initialize the internal functions
ldi R16,226
rcall _Lcd_Write_command
.dbline 326
; LCD_Delay(100);
ldi R16,100
ldi R17,0
rcall _LCD_Delay
.dbline 327
; Lcd_Write_command(0xae); //DISPLAY OFF
ldi R16,174
rcall _Lcd_Write_command
.dbline 328
; Lcd_Write_command(0xa1); //ADC SELECT ON
ldi R16,161
rcall _Lcd_Write_command
.dbline 329
; Lcd_Write_command(0xc0); //SHL SELECT COM64-COM1
ldi R16,192
rcall _Lcd_Write_command
.dbline 330
; Lcd_Write_command(0xa2); //SET LCD BIAS(1/9)
ldi R16,162
rcall _Lcd_Write_command
.dbline 332
; //////////////////////////////////////////////////////
; Lcd_Write_command(0x2c);//SET POWER CONTROL(VC=1)
ldi R16,44
rcall _Lcd_Write_command
.dbline 333
; Lcd_Write_command(0x2e); //SET POWER CONTROL(VR=1)
ldi R16,46
rcall _Lcd_Write_command
.dbline 334
; Lcd_Write_command(0x2f); //SET POWER CONTROL(VF=1)
ldi R16,47
rcall _Lcd_Write_command
.dbline 336
; ////////////////////////////////////////////////////////
; Lcd_Write_command(0x26); //REGULATOR RESISTOR SELECT(R2 R1 R0)=110
ldi R16,38
rcall _Lcd_Write_command
.dbline 337
; Lcd_Write_command(0x81); //SET REFERENCE VOLTAGE MODE
ldi R16,129
rcall _Lcd_Write_command
.dbline 338
; Lcd_Write_command(0x3f); //SET REFERENCE VOLTAGE REGISTER 2ch
ldi R16,63
rcall _Lcd_Write_command
.dbline 340
; //////////////////////////////////////////////////////
; Lcd_Write_command(0x7f); //START DISPLAY LINE(COM1) 起始行
ldi R16,127
rcall _Lcd_Write_command
.dbline 342
; //////////////////////////////////////////////////////
; Lcd_Write_command(0xe0); //写入数据时地址自动加1,读数据时不变
ldi R16,224
rcall _Lcd_Write_command
.dbline 344
; //////////////////////////////////////////////////////////
; Lcd_Write_command(0xaf); //DISPLAY ON
ldi R16,175
rcall _Lcd_Write_command
.dbline -2
L49:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Lcd_Write_Data _Lcd_Write_Data fV
; i -> R20,R21
; temp -> R22,R23
; DATA -> R20
.even
_Lcd_Write_Data::
rcall push_gset2
mov R20,R16
.dbline -1
.dbline 348
; }
; //--------------------------------LCD写数据函数---------------------------------
; void Lcd_Write_Data(uchar DATA) //写一个字节,再加一列,正好在一页
; { //定好一页后,再一列一列的写
.dbline 350
; int i,temp;
; temp=DATA;
mov R22,R20
clr R23
.dbline 351
; Low_LCD_RS;
cbi 0x15,5
.dbline 351
.dbline 352
; Hign_LCD_CS;
sbi 0x15,7
.dbline 352
.dbline 353
; Hign_LCD_SCL;
sbi 0x15,4
.dbline 353
.dbline 354
; LCD_Delay(1);
ldi R16,1
ldi R17,0
rcall _LCD_Delay
.dbline 355
; Low_LCD_CS;
cbi 0x15,7
.dbline 355
.dbline 356
; Low_LCD_SCL;
cbi 0x15,4
.dbline 356
.dbline 357
; Hign_LCD_RS; //RS=1 时为写数据
sbi 0x15,5
.dbline 357
.dbline 358
; LCD_Delay(1);
ldi R16,1
ldi R17,0
rcall _LCD_Delay
.dbline 359
; for(i=0;i<8;i++)
clr R20
clr R21
L51:
.dbline 360
; {
.dbline 361
; Low_LCD_SCL;
cbi 0x15,4
.dbline 361
.dbline 362
; if(temp&0x80)
sbrs R22,7
rjmp L55
.dbline 363
; {
.dbline 364
; Hign_LCD_SI;
sbi 0x15,3
.dbline 364
.dbline 365
; }
rjmp L56
L55:
.dbline 367
; else
; {
.dbline 368
; Low_LCD_SI;
cbi 0x15,3
.dbline 368
.dbline 369
; }
L56:
.dbline 370
ldi R16,1
ldi R17,0
rcall _LCD_Delay
.dbline 371
lsl R22
rol R23
.dbline 372
sbi 0x15,4
.dbline 372
.dbline 373
ldi R16,1
ldi R17,0
rcall _LCD_Delay
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -