📄 qingxi.lst
字号:
__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 + -