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

📄 qingxi.lst

📁 超简单的编码开关(单键飞梭开关)解码程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    0B99 E5CF      LDI	R28,0x5F
    0B9A E0D8      LDI	R29,0x8
    0B9B BFCD      OUT	0x3D,R28
    0B9C BFDE      OUT	0x3E,R29
    0B9D 51C0      SUBI	R28,0x10
    0B9E 40D0      SBCI	R29,0
    0B9F EA0A      LDI	R16,0xAA
    0BA0 8308      STD	Y+0,R16
    0BA1 2400      CLR	R0
    0BA2 E6E6      LDI	R30,0x66
    0BA3 E0F1      LDI	R31,1
    0BA4 E011      LDI	R17,1
    0BA5 39E4      CPI	R30,0x94
    0BA6 07F1      CPC	R31,R17
    0BA7 F011      BEQ	0x0BAA
    0BA8 9201      ST	R0,Z+
    0BA9 CFFB      RJMP	0x0BA5
    0BAA 8300      STD	Z+0,R16
    0BAB E2EB      LDI	R30,0x2B
    0BAC E1F6      LDI	R31,0x16
    0BAD E6A0      LDI	R26,0x60
    0BAE E0B0      LDI	R27,0
    0BAF E117      LDI	R17,0x17
    0BB0 33E1      CPI	R30,0x31
    0BB1 07F1      CPC	R31,R17
    0BB2 F021      BEQ	0x0BB7
    0BB3 95C8      LPM
    0BB4 9631      ADIW	R30,1
    0BB5 920D      ST	R0,X+
    0BB6 CFF9      RJMP	0x0BB0
    0BB7 940E1033  CALL	_main
_exit:
    0BB9 CFFF      RJMP	_exit
FILE: F:\bss\AVR-ICC\qingxi\main.c
(0001) //ICC-AVR application builder : 2005-10-22 20:39:47
(0002) // Target : M32  ,Fuse: 0xAF,0xD4   BLB11:0 BLB12:0
(0003) // Crystal:  8.000000Mhz
(0004) // LCD: 北京青云LCM2401281 (T6963驱动),模拟时序驱动
(0005) // 注意:0x7C00-0x7fff 保留为bootloader区  (512Word)
(0006) 
(0007) #include <iom32v.h>
(0008) #include <macros.h>
(0009) #include <eeprom.h>
(0010) #include "stdarg.h"
(0011) #include "stdio.h"
(0012) 
(0013) //英文及中文字模图标
(0014) #include "ZM.H"      
(0015) 
(0016) #define uchar           unsigned char 
(0017) #define uint            unsigned int
(0018) #define cchar           const unsigned char
(0019) 
(0020) #ifndef 	StructRowandcol
(0021) 	struct	rowandcol
(0022) 	{
(0023) 		uchar row;
(0024) 		uchar col;
(0025) 	};
(0026) 	#define 	StructRowandcol
(0027) #endif
(0028) 
(0029) #ifndef 	UnionAddress
(0030) 	union 	address 
(0031) 	{
(0032) 		uint a;
(0033) 		struct
(0034) 		{
(0035) 			uchar ah;
(0036) 			uchar al;
(0037) 		}apart;
(0038) 	};
(0039) 	#define 	UnionAddress
(0040) #endif
(0041) 
(0042) 
(0043) union uint2uchars
(0044) {
(0045) 	uint uintx;
(0046) 	uchar ucharx[2];
(0047) };
(0048) 
(0049) 
(0050) //LCD Size
(0051) 
(0052) #define LCD_LEFT        0
(0053) #define LCD_TOP         0
(0054) #define LCD_RIGHT       239
(0055) #define LCD_BOTTOM      127
(0056) 
(0057) #define LCD_DELAY       0
(0058) 
(0059) //LCD功能引脚定义
(0060) #define LCD_RW          PD7
(0061) #define LCD_RD          PD4
(0062) #define LCD_CE          PD5
(0063) #define LCD_CD          PD3
(0064) #define LCD_RES         PD6
(0065) #define LCD_CODE_P      PORTD
(0066) 
(0067) 
(0068) #define LCD_RW_H        LCD_CODE_P |=  BIT(LCD_RW)
(0069) #define LCD_RW_L        LCD_CODE_P &= ~BIT(LCD_RW)
(0070) #define LCD_RD_H        LCD_CODE_P |=  BIT(LCD_RD)
(0071) #define LCD_RD_L        LCD_CODE_P &= ~BIT(LCD_RD)
(0072) #define LCD_CE_H        LCD_CODE_P |=  BIT(LCD_CE)
(0073) #define LCD_CE_L        LCD_CODE_P &= ~BIT(LCD_CE)
(0074) #define LCD_CD_H        LCD_CODE_P |=  BIT(LCD_CD)
(0075) #define LCD_CD_L        LCD_CODE_P &= ~BIT(LCD_CD)
(0076) #define LCD_RES_H       LCD_CODE_P |=  BIT(LCD_RES)
(0077) #define LCD_RES_L       LCD_CODE_P &= ~BIT(LCD_RES)
(0078) 
(0079) #define LCD_DATA        PINC
(0080) #define LCD_DDR         DDRC
(0081) #define LCD_PORT        PORTC
(0082) /***********************************************************************************/
(0083) 
(0084) // ASCII 字模宽度及高度定义
(0085) #define 		ASC_CHR_WIDTH		 8
(0086) #define 		ASC_CHR_HEIGHT		12
(0087) 
(0088) //定义ASCII码
(0089) #define		STX			0x02
(0090) #define		ETX			0x03
(0091) #define		EOT			0x04
(0092) #define		ENQ			0x05
(0093) #define		BS				0x08
(0094) #define		CR				0x0D
(0095) #define		LF				0x0A
(0096) #define		DLE			0x10
(0097) #define		ETB			0x17
(0098) #define		SPACE			0x20
(0099) #define		COMMA			0x2C
(0100) 
(0101) // T6963C 命令定义
(0102) #define 	LC_CUR_POS		0x21		// 光标位置设置
(0103) #define 	LC_CGR_POS		0x22		// CGRAM偏置地址设置
(0104) #define 	LC_ADD_POS		0x24		// 地址指针位置
(0105) #define 	LC_TXT_STP		0x40		// 文本区首址
(0106) #define 	LC_TXT_WID		0x41		// 文本区宽度
(0107) #define 	LC_GRH_STP		0x42		// 图形区首址
(0108) #define 	LC_GRH_WID		0x43		// 图形区宽度
(0109) #define 	LC_MOD_OR		0x80		// 显示方式:逻辑“或”
(0110) #define 	LC_MOD_XOR		0x81		// 显示方式:逻辑“异或”
(0111) #define 	LC_MOD_AND		0x82		// 显示方式:逻辑“与”
(0112) #define 	LC_MOD_TCH		0x83		// 显示方式:文本特征
(0113) #define 	LC_DIS_SW		0x90		// 显示开关:D0=1/0:光标闪烁启用/禁用;
(0114) 											// 			 D1=1/0:光标显示启用/禁用;
(0115) 											// 			 D2=1/0:文本显示启用/禁用;
(0116) 											// 			 D3=1/0:图形显示启用/禁用;
(0117) #define 	LC_CUR_SHP		0xA1		// 光标形状选择:0xA0-0xA7表示光标占的行数
(0118) #define 	LC_AUT_WR		0xB0		// 自动写设置
(0119) #define 	LC_AUT_RD		0xB1		// 自动读设置
(0120) #define 	LC_AUT_OVR		0xB2		// 自动读/写结束
(0121) #define 	LC_INC_WR		0xC0		// 数据一次写,地址加1
(0122) #define 	LC_INC_RD		0xC1		// 数据一次读,地址加1
(0123) #define 	LC_DEC_WR		0xC2		// 数据一次写,地址减1
(0124) #define 	LC_DEC_RD		0xC3		// 数据一次读,地址减1
(0125) #define 	LC_NOC_WR		0xC4		// 数据一次写,地址不变
(0126) #define 	LC_NOC_RD		0xC5		// 数据一次读,地址不变
(0127) #define 	LC_SCN_RD		0xE0		// 屏读
(0128) #define 	LC_SCN_CP		0xE8		// 屏拷贝
(0129) #define 	LC_BIT_OP		0xF0		// 位操作:D0-D2:定义D0-D7位;D3:1置位;0:清除
(0130) 
(0131) 
(0132) const uchar *OperPowerCode[4]={"低  ","中  ","高  ","超高"};    
(0133) #define CompanyName  "江苏镇江爱邦电子科技有限公司" 
(0134) 
(0135) //定义全局变量
(0136) uchar Freq_H,keycounter,keydirection;    //Freq频率,KEY键值,key-direct
(0137) uchar mSEC,UpdateFlag,S_flag;  
(0138) uint  Freq,lastfreq;
(0139) uchar DisplayBuffer[7];				  //显示数据缓冲
(0140) uchar gCurRow,gCurCol;	    // 当前行、列存储,行高16点,列宽8点
(0141) 
(0142) //蜂鸣器接PortB.1
(0143) #define beep (1<<1)                        
(0144) #define beep_1() (PORTB |=beep)
(0145) #define beep_0() (PORTB &=~beep)
(0146) #define beep_off() (PORTB |=beep)
(0147) #define beep_on() (PORTB &=~beep)
(0148) 
(0149) //8MHz时钟,1uS精确延时
(0150) //#define delay_1us() asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop")
(0151) 
(0152) //7.3728MHz时钟,~1uS延时
(0153) #define delay_1us() asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop")
(0154) 
(0155) 
(0156) //延时N微秒
(0157) void delay_us(uint us)
(0158)    {
_delay_us:
  us                   --> R16
    0BBA C007      RJMP	0x0BC2
(0159)    while(us--) {
(0160)       delay_1us();
    0BBB 0000      NOP
    0BBC 0000      NOP
    0BBD 0000      NOP
    0BBE 0000      NOP
    0BBF 0000      NOP
    0BC0 0000      NOP
    0BC1 0000      NOP
    0BC2 0118      MOVW	R2,R16
    0BC3 5001      SUBI	R16,1
    0BC4 4010      SBCI	R17,0
    0BC5 2022      TST	R2
    0BC6 F7A1      BNE	0x0BBB
    0BC7 2033      TST	R3
    0BC8 F791      BNE	0x0BBB
    0BC9 9508      RET
_delay_ms:
  ms                   --> R20
    0BCA 940E1377  CALL	push_gset1
    0BCC 01A8      MOVW	R20,R16
(0161)       }
(0162)    }
(0163) 
(0164) //延时N毫秒   
(0165) void delay_ms(uint ms) {
    0BCD C003      RJMP	0x0BD1
(0166)      while(ms--) {
(0167) 	    delay_us(1000);
    0BCE EE08      LDI	R16,0xE8
    0BCF E013      LDI	R17,3
    0BD0 DFE9      RCALL	_delay_us
    0BD1 011A      MOVW	R2,R20
    0BD2 5041      SUBI	R20,1
    0BD3 4050      SBCI	R21,0
    0BD4 2022      TST	R2
    0BD5 F7C1      BNE	0x0BCE
    0BD6 2033      TST	R3
    0BD7 F7B1      BNE	0x0BCE
    0BD8 940E137A  CALL	pop_gset1
    0BDA 9508      RET
_beeps:
  i                    --> R20
    0BDB 940E1377  CALL	push_gset1
    0BDD 2F40      MOV	R20,R16
(0168) 	    } 
(0169)      }
(0170) 
(0171) //蜂鸣器讯响 	 
(0172) void beeps(unsigned char i) {      
    0BDE C008      RJMP	0x0BE7
(0173)      while(i--) { 
(0174) 	       beep_on();
    0BDF 98C1      CBI	0x18,1
(0175) 	       delay_ms(30);
    0BE0 E10E      LDI	R16,0x1E
    0BE1 E010      LDI	R17,0
    0BE2 DFE7      RCALL	_delay_ms
(0176) 		   beep_off();
    0BE3 9AC1      SBI	0x18,1
(0177) 	       delay_ms(30);
    0BE4 E10E      LDI	R16,0x1E
    0BE5 E010      LDI	R17,0
    0BE6 DFE3      RCALL	_delay_ms
    0BE7 2E24      MOV	R2,R20
    0BE8 2433      CLR	R3
    0BE9 5041      SUBI	R20,1
    0BEA 2022      TST	R2
    0BEB F799      BNE	0x0BDF
    0BEC 940E137A  CALL	pop_gset1
    0BEE 9508      RET
(0178) 		   }		   
(0179)      }	    	 
(0180) 
(0181) //DDRxn    PortX    I/O     上拉  
(0182) //  0        0      input    off       三态      
(0183) //  0        1      input    on        弱上拉
(0184) //  1        0      output   off       推挽0
(0185) //  1        1      output   off       推挽1
(0186) //端口初始化
(0187) void port_init(void)
(0188) {
(0189)         PORTA = 0x1C;    //&B000,111,00                                          '0x1C
_port_init:
    0BEF E18C      LDI	R24,0x1C
    0BF0 BB8B      OUT	0x1B,R24
(0190)         DDRA  = 0xE0;    //&B111,000,00  porta.7-porta.2 Kekyscan,1:0 ADC input  '0xE0
    0BF1 EE80      LDI	R24,0xE0
    0BF2 BB8A      OUT	0x1A,R24
(0191)         PORTB = 0xF3;    //portb.2,3=0
    0BF3 EF83      LDI	R24,0xF3
    0BF4 BB88      OUT	0x18,R24
(0192)         DDRB  = 0xFE;   
    0BF5 EF8E      LDI	R24,0xFE
    0BF6 BB87      OUT	0x17,R24
(0193)         PORTC = 0xFF;    //m103 output only
    0BF7 EF8F      LDI	R24,0xFF
    0BF8 BB85      OUT	0x15,R24
(0194)         DDRC  = 0x00;
    0BF9 2422      CLR	R2
    0BFA BA24      OUT	0x14,R2
(0195)         PORTD = 0xFF;
    0BFB BB82      OUT	0x12,R24
(0196)         DDRD  = 0xFA;    //PD.0(RXD),PORTD.2(INT0)=input,&B1111,1010 
    0BFC EF8A      LDI	R24,0xFA
    0BFD BB81      OUT	0x11,R24
    0BFE 9508      RET
(0197) }
(0198) 
(0199) //Watchdog initialize
(0200) // prescale: 2048K
(0201) void watchdog_init(void)
(0202) {
(0203)  WDR(); //this prevents a timout on enabling
_watchdog_init:
    0BFF 95A8      WDR
(0204)  WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
    0C00 E08F      LDI	R24,0xF
    0C01 BD81      OUT	0x21,R24
    0C02 9508      RET
(0205) }
(0206) 
(0207) //TIMER0 initialize - prescale:Falling edge
(0208) // WGM: Normal
(0209) // desired value: 1Hz
(0210) // actual value: Out of range
(0211) void timer0_init(void)
(0212) {
(0213)  TCCR0 = 0x00; //stop
_timer0_init:
    0C03 2422      CLR	R2
    0C04 BE23      OUT	0x33,R2
(0214)  TCNT0 = 0x00 /*INVALID SETTING*/; //set count
    0C05 BE22      OUT	0x32,R2
(0215)  OCR0  = 0x00 /*INVALID SETTING*/;  //set compare
    0C06 BE2C      OUT	0x3C,R2
(0216)  TCCR0 = 0x06; //start timer
    0C07 E086      LDI	R24,6
    0C08 BF83      OUT	0x33,R24
    0C09 9508      RET
_timer0_ovf_isr:
    0C0A 922A      ST	R2,-Y
    0C0B 938A      ST	R24,-Y
    0C0C 939A      ST	R25,-Y
    0C0D B62F      IN	R2,0x3F
    0C0E 922A      ST	R2,-Y
(0217) }
(0218) 
(0219) //T0计数器中断
(0220) #pragma interrupt_handler timer0_ovf_isr:12
(0221) void timer0_ovf_isr(void)
(0222) {
(0223)  Freq_H++;                           //外部脉冲计数用于测量频率                            
    0C0F 91800178  LDS	R24,Freq_H
    0C11 5F8F      SUBI	R24,0xFF
    0C12 93800178  STS	Freq_H,R24
(0224)  TCNT0 = 0x00;                       //reload counter value
    0C14 2422      CLR	R2
    0C15 BE22      OUT	0x32,R2
    0C16 9029      LD	R2,Y+
    0C17 BE2F      OUT	0x3F,R2
    0C18 9199      LD	R25,Y+
    0C19 9189      LD	R24,Y+
    0C1A 9029      LD	R2,Y+
    0C1B 9518      RETI
(0225) }
(0226) 
(0227) //*
(0228) //7.3728MHz
(0229) //TIMER1 initialize - prescale:1024
(0230) // desired value: 100mSec
(0231) // actual value: 100.000mSec (0.0%)
(0232) void timer1_init(void)
(0233) {
(0234)  TCCR1B = 0x00; //stop
_timer1_init:
    0C1C 2422      CLR	R2
    0C1D BC2E      OUT	0x2E,R2
(0235)  TCNT1H = 0xFD; //setup
    0C1E EF8D      LDI	R24,0xFD
    0C1F BD8D      OUT	0x2D,R24
(0236)  TCNT1L = 0x30;
    0C20 E380      LDI	R24,0x30
    0C21 BD8C      OUT	0x2C,R24
(0237)  OCR1AH = 0x02;
    0C22 E082      LDI	R24,2
    0C23 BD8B      OUT	0x2B,R24
(0238)  OCR1AL = 0xD0;
    0C24 ED80      LDI	R24,0xD0
    0C25 BD8A      OUT	0x2A,R24
(0239)  OCR1BH = 0x02;
    0C26 E082      LDI	R24,2
    0C27 BD89      OUT	0x29,R24
(0240)  OCR1BL = 0xD0;
    0C28 ED80      LDI	R24,0xD0
    0C29 BD88      OUT	0x28,R24
(0241)  ICR1H  = 0x02;
    0C2A E082      LDI	R24,2
    0C2B BD87      OUT	0x27,R24
(0242)  ICR1L  = 0xD0;
    0C2C ED80      LDI	R24,0xD0
    0C2D BD86      OUT	0x26,R24
(0243)  TCCR1A = 0x00;
    0C2E BC2F      OUT	0x2F,R2
(0244)  TCCR1B = 0x05; //start Timer
    0C2F E085      LDI	R24,5
    0C30 BD8E      OUT	0x2E,R24
    0C31 9508      RET
_timer1_ovf_isr:
    0C32 922A      ST	R2,-Y
    0C33 923A      ST	R3,-Y
    0C34 924A      ST	R4,-Y
    0C35 925A      ST	R5,-Y
    0C36 930A      ST	R16,-Y
    0C37 931A      ST	R17,-Y
    0C38 932A      ST	R18,-Y
    0C39 933A      ST	R19,-Y
    0C3A 938A      ST	R24,-Y
    0C3B 939A      ST	R25,-Y
    0C3C B62F      IN	R2,0x3F
    0C3D 922A      ST	R2,-Y
(0245) }
(0246) //*/
(0247) 
(0248) 

⌨️ 快捷键说明

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