📄 wdct.lst
字号:
__start:
__text_start:
0032 E5CF LDI R28,0x5F
0033 E0D4 LDI R29,4
0034 BFCD OUT 0x3D,R28
0035 BFDE OUT 0x3E,R29
0036 52C0 SUBI R28,0x20
0037 40D0 SBCI R29,0
0038 EA0A LDI R16,0xAA
0039 8308 STD Y+0,R16
003A 2400 CLR R0
003B E6E0 LDI R30,0x60
003C E0F0 LDI R31,0
003D E012 LDI R17,2
003E 3DE9 CPI R30,0xD9
003F 07F1 CPC R31,R17
0040 F011 BEQ 0x0043
0041 9201 ST R0,Z+
0042 CFFB RJMP 0x003E
0043 8300 STD Z+0,R16
0044 E6E4 LDI R30,0x64
0045 E0F0 LDI R31,0
0046 E6A0 LDI R26,0x60
0047 E0B0 LDI R27,0
0048 E010 LDI R17,0
0049 36E4 CPI R30,0x64
004A 07F1 CPC R31,R17
004B F021 BEQ 0x0050
004C 95C8 LPM
004D 9631 ADIW R30,1
004E 920D ST R0,X+
004F CFF9 RJMP 0x0049
0050 940E0773 CALL _main
_exit:
0052 CFFF RJMP _exit
FILE: D:\mywork\无绳电话\NRF2401\nRF24L01_atmega16\nrf24l01\init.c
(0001) //ICC-AVR application builder : 2006-11-14 8:40:20
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007)
(0008) void port_init(void)
(0009) {
(0010) PORTB = 0xEF;
_port_init:
0053 EE8F LDI R24,0xEF
0054 BB88 OUT 0x18,R24
(0011) DDRB = 0xbb;//10111011;
0055 EB8B LDI R24,0xBB
0056 BB87 OUT 0x17,R24
(0012)
(0013) PORTC = 0xFF;
0057 EF8F LDI R24,0xFF
0058 BB85 OUT 0x15,R24
(0014) DDRC = 0xfe;
0059 EF8E LDI R24,0xFE
005A BB84 OUT 0x14,R24
(0015) PORTD = 0xFe;
005B BB82 OUT 0x12,R24
(0016) DDRD = 0xfa;//0x02;
005C EF8A LDI R24,0xFA
005D BB81 OUT 0x11,R24
(0017) }
005E 9508 RET
(0018) //--------------------------------------------------------
(0019) //--------------------------------------------------------
(0020)
(0021)
(0022) //--------------------------------------------------------
(0023) //--------------------------------------------------------
(0024) //Watchdog initialisation
(0025) // prescale: 16K cycles
(0026) void watchdog_init(void)
(0027) {
(0028) WDR(); //this prevents a timout on enabling
_watchdog_init:
005F 95A8 WDR
(0029) WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
0060 E088 LDI R24,0x8
0061 BD81 OUT 0x21,R24
(0030) }
0062 9508 RET
(0031) //--------------------------------------------------------
(0032) //--------------------------------------------------------
(0033)
(0034)
(0035) //--------------------------------------------------------
(0036) //--------------------------------------------------------
(0037) void SPI_MasterInit(void)
(0038) {
(0039) SPI_PORT |= (1<<nrfCE);
_SPI_MasterInit:
0063 9AC3 SBI 0x18,3
(0040) _NOP();_NOP();_NOP();
0064 0000 NOP
0065 0000 NOP
0066 0000 NOP
(0041) SPI_DDR |= (1<<SpiMosi)|(1<<SpiSck)|(1<<nrfCE); //设置MOSI、SS 和SCK 为输出
0067 B387 IN R24,0x17
0068 6A88 ORI R24,0xA8
0069 BB87 OUT 0x17,R24
(0042) SPI_DDR &= ~(1<<SpiMiso); //设置MISO 为输入
006A 98BE CBI 0x17,6
(0043) SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //使能SPI 主机模式,设置时钟速率为fck/16=500kHz,MSB first
006B E581 LDI R24,0x51
006C B98D OUT 0x0D,R24
(0044) }
006D 9508 RET
(0045) //--------------------------------------------------------
(0046) //--------------------------------------------------------
(0047)
(0048)
(0049) //--------------------------------------------------------
(0050) //--------------------------------------------------------
(0051) //call this routine to initialise all peripherals
(0052) void InitInterrupt(void)
(0053) {
(0054) UBRRH = 0x80;
_InitInterrupt:
006E E880 LDI R24,0x80
006F BD80 OUT 0x20,R24
(0055) UCSRC=0x86;
0070 E886 LDI R24,0x86
0071 BD80 OUT 0x20,R24
(0056) UBRRL=0xcf;
0072 EC8F LDI R24,0xCF
0073 B989 OUT 0x09,R24
(0057) UCSRC=0x86; //定义串口 8位数据位置 异步通讯
0074 E886 LDI R24,0x86
0075 BD80 OUT 0x20,R24
(0058) UBRRL=0xcf; //定义波特率 在8M时钟情况下 0xcf 2400波特
0076 EC8F LDI R24,0xCF
0077 B989 OUT 0x09,R24
(0059) //4800波特 0x67
(0060) UCSRA=0x20; //UCSRA:USART Control and Status A 清除接收寄存器
0078 E280 LDI R24,0x20
0079 B98B OUT 0x0B,R24
(0061) UCSRB=0xd8; //UCSRB:USART Control and Status B
007A ED88 LDI R24,0xD8
007B B98A OUT 0x0A,R24
(0062) //允许接收及发送中断,接收使能 发送使能
(0063) UBRRH = 0x80;
007C E880 LDI R24,0x80
007D BD80 OUT 0x20,R24
(0064) UCSRC=0x86;
007E E886 LDI R24,0x86
007F BD80 OUT 0x20,R24
(0065) UBRRL=0xcf;
0080 EC8F LDI R24,0xCF
0081 B989 OUT 0x09,R24
(0066)
(0067) TCCR0 = 0x00; //定时器0溢出值初始化 0.5豪秒中断一次
0082 2422 CLR R2
0083 BE23 OUT 0x33,R2
(0068) TCNT0 = 0x82;
0084 E882 LDI R24,0x82
0085 BF82 OUT 0x32,R24
(0069) TCCR0 = 0x03; //定义时钟32分频
0086 E083 LDI R24,3
0087 BF83 OUT 0x33,R24
(0070)
(0071) TCCR1B = 0x00; //定时器1溢出值初始化 2豪秒中断一次
0088 BC2E OUT 0x2E,R2
(0072) TCNT1H = 0xf8;
0089 EF88 LDI R24,0xF8
008A BD8D OUT 0x2D,R24
(0073) TCNT1L = 0x2f;
008B E28F LDI R24,0x2F
008C BD8C OUT 0x2C,R24
(0074) TCCR1A = 0x00;
008D BC2F OUT 0x2F,R2
(0075) TCCR1B = 0x02; //定义时钟8分频
008E E082 LDI R24,2
008F BD8E OUT 0x2E,R24
(0076)
(0077) MCUCR = 0x02;
0090 BF85 OUT 0x35,R24
(0078) GICR=0x40; //不允许INT1 INT2 ,允许INT0
0091 E480 LDI R24,0x40
0092 BF8B OUT 0x3B,R24
(0079) TIMSK=0x05; //TIMER0 及 TIMER1溢出中断使能
0093 E085 LDI R24,5
0094 BF89 OUT 0x39,R24
(0080) }
0095 9508 RET
(0081) //--------------------------------------------------------
(0082) //--------------------------------------------------------
(0083)
(0084)
(0085) //--------------------------------------------------------
(0086) //--------------------------------------------------------
(0087) void init_devices(void)
(0088) {
(0089) //stop errant interrupts until set up
(0090) CLI(); //disable all interrupts
_init_devices:
0096 94F8 BCLR 7
(0091) port_init();
0097 DFBB RCALL _port_init
(0092) watchdog_init();
0098 DFC6 RCALL _watchdog_init
(0093) InitInterrupt();
0099 DFD4 RCALL _InitInterrupt
(0094)
(0095) MCUCR = 0x02;
009A E082 LDI R24,2
009B BF85 OUT 0x35,R24
(0096) // GICR = 0x00;
(0097) TIMSK = 0x05; //timer interrupt sources
009C E085 LDI R24,5
009D BF89 OUT 0x39,R24
(0098) SEI(); //re-enable interrupts
009E 9478 BSET 7
(0099) //all peripherals are now initialised
(0100) }
009F 9508 RET
FILE: D:\mywork\无绳电话\NRF2401\nRF24L01_atmega16\nrf24l01\key.c
(0001) //-------------------------- 3 2 1 0
(0002) //------------------------- 4 dKey4 dKey8 dKeyC dKeyG
(0003) //------------------------- 5 dKey3 dKey7 dKeyB dKeyF
(0004) //------------------------- 6 dKey2 dKey6 dKeyA dKeyE
(0005) //------------------------- 7 dKey1 dKey5 dKey9 dKeyD
(0006) //--------------------------76543210
(0007) #define dKey1 1 // 01110111=77
(0008) #define dKey2 2 // 10110111=b7
(0009) #define dKey3 3 // 11010111=d7
(0010) #define dKey4 4 // 11100111=e7
(0011) #define dKey5 5 // 01111011=7b
(0012) #define dKey6 6 // 10111011=bb
(0013) #define dKey7 7 // 11011011=db
(0014) #define dKey8 8 // 11101011=eb
(0015) #define dKey9 9 // 01111101=7d
(0016) #define dKeyA 10 // 10111101=bd
(0017) #define dKeyB 11 // 11011101=dd
(0018) #define dKeyC 12 // 11101101=ed
(0019) #define dKeyD 13 // 01111110=7e
(0020) #define dKeyE 14 // 10111110=be
(0021) #define dKeyF 15 // 11011110=de
(0022) #define dKey0 0 // 11101110=ee
(0023) const unsigned char KeycodeNum[]=
(0024) //dKey0,dKey1,dKey2,dKey3,dKey4,dKey5,dKey6,dKey7,dKey8,dKey9,dKeyA,dKeyB,dKeyC,dKeyD,dKeyE,dKeyF.
(0025) { 0xee, 0x77, 0xb7, 0xd7, 0xe7, 0x7b, 0xbb, 0xdb, 0xeb, 0x7d, 0xbd, 0xdd, 0xed, 0x7e, 0xbe, 0xde};
(0026) //
(0027) // ---------------------------------------------------------------------
(0028) void INT_KeyTest(void) //键反转法检测键盘
(0029) {
(0030) unsigned char j,i,KeyCodeTemp,KeyCode;
(0031)
(0032) KeyPORT=0xf0;
_INT_KeyTest:
KeyCodeTemp --> R16
j --> R16
KeyCode --> R18
i --> R16
00A0 EF80 LDI R24,0xF0
00A1 BB8B OUT 0x1B,R24
(0033) _NOP();_NOP();_NOP();
00A2 0000 NOP
00A3 0000 NOP
00A4 0000 NOP
(0034) _NOP();_NOP();_NOP();
00A5 0000 NOP
00A6 0000 NOP
00A7 0000 NOP
(0035) _NOP();_NOP();_NOP();
00A8 0000 NOP
00A9 0000 NOP
00AA 0000 NOP
(0036) KeyDDR=0x0f;
00AB E08F LDI R24,0xF
00AC BB8A OUT 0x1A,R24
(0037) _NOP();_NOP();_NOP();
00AD 0000 NOP
00AE 0000 NOP
00AF 0000 NOP
(0038) _NOP();_NOP();_NOP();
00B0 0000 NOP
00B1 0000 NOP
00B2 0000 NOP
(0039) _NOP();_NOP();_NOP();
00B3 0000 NOP
00B4 0000 NOP
00B5 0000 NOP
(0040) j=(KeyPIN&0xf0);
00B6 B309 IN R16,0x19
00B7 7F00 ANDI R16,0xF0
(0041) if (j==0xf0)
00B8 3F00 CPI R16,0xF0
00B9 F441 BNE 0x00C2
(0042) {
(0043) KeyBeforeCodeTemp=j; //无键按下
00BA 93000074 STS _KeyBeforeCodeTemp,R16
(0044) KeyDelayCou=0;
00BC 2422 CLR R2
00BD 92200073 STS _KeyDelayCou,R2
(0045) bKeyPress=0;
00BF 92200071 STS _bKeyPress,R2
(0046) return;
00C1 C05B RJMP 0x011D
(0047) }
(0048) // -----------------------------------------------
(0049) // -----------------------------------------------
(0050)
(0051) KeyBeforeCodeTemp=j;
00C2 93000074 STS _KeyBeforeCodeTemp,R16
(0052) if (bKeyPress!=0) return;
00C4 90200071 LDS R2,_bKeyPress
00C6 2022 TST R2
00C7 F009 BEQ 0x00C9
00C8 C054 RJMP 0x011D
(0053) if (KeyDelayCou<0x40)
00C9 91800073 LDS R24,_KeyDelayCou
00CB 3480 CPI R24,0x40
00CC F420 BCC 0x00D1
(0054) {
(0055) KeyDelayCou++;
00CD 5F8F SUBI R24,0xFF
00CE 93800073 STS _KeyDelayCou,R24
(0056) return;
00D0 C04C RJMP 0x011D
(0057) }
(0058) else {bKeyPress=0x55;KeyDelayCou=0;} //键盘延迟是否足够
00D1 E585 LDI R24,0x55
00D2 93800071 STS _bKeyPress,R24
00D4 2422 CLR R2
00D5 92200073 STS _KeyDelayCou,R2
(0059)
(0060) if (bKeyGetted==dTrue) return; //键值取得,还未处理 返回
00D7 91800070 LDS R24,_bKeyGetted
00D9 3585 CPI R24,0x55
00DA F409 BNE 0x00DC
00DB C041 RJMP 0x011D
(0061)
(0062) // Led2FlashTimes=1;
(0063)
(0064)
(0065) KeyPORT=0xf0;
00DC EF80 LDI R24,0xF0
00DD BB8B OUT 0x1B,R24
(0066) _NOP();_NOP();_NOP();
00DE 0000 NOP
00DF 0000 NOP
00E0 0000 NOP
(0067) _NOP();_NOP();_NOP();
00E1 0000 NOP
00E2 0000 NOP
00E3 0000 NOP
(0068) _NOP();_NOP();_NOP();
00E4 0000 NOP
00E5 0000 NOP
00E6 0000 NOP
(0069) KeyDDR=0x0f;
00E7 E08F LDI R24,0xF
00E8 BB8A OUT 0x1A,R24
(0070) _NOP();_NOP();_NOP();
00E9 0000 NOP
00EA 0000 NOP
00EB 0000 NOP
(0071) _NOP();_NOP();_NOP();
00EC 0000 NOP
00ED 0000 NOP
00EE 0000 NOP
(0072) _NOP();_NOP();_NOP();
00EF 0000 NOP
00F0 0000 NOP
00F1 0000 NOP
(0073) KeyCode=(KeyPIN&0xf0); //取键代码
00F2 B329 IN R18,0x19
00F3 7F20 ANDI R18,0xF0
(0074)
(0075) KeyPORT=0x0f;
00F4 BB8B OUT 0x1B,R24
(0076) _NOP();_NOP();_NOP();
00F5 0000 NOP
00F6 0000 NOP
00F7 0000 NOP
(0077) _NOP();_NOP();_NOP();
00F8 0000 NOP
00F9 0000 NOP
00FA 0000 NOP
(0078) KeyDDR=0xf0;
00FB EF80 LDI R24,0xF0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -