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

📄 wdct.lst

📁 我写的atmega16驱动的nrf24l01程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__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 + -