📄 frequence.lst
字号:
__text_start:
__start:
002B E5CF LDI R28,0x5F
002C E0D4 LDI R29,4
002D BFCD OUT 0x3D,R28
002E BFDE OUT 0x3E,R29
002F 51C0 SUBI R28,0x10
0030 40D0 SBCI R29,0
0031 EA0A LDI R16,0xAA
0032 8308 STD Y+0,R16
0033 2400 CLR R0
0034 E6E2 LDI R30,0x62
0035 E0F0 LDI R31,0
0036 E010 LDI R17,0
0037 36E2 CPI R30,0x62
0038 07F1 CPC R31,R17
0039 F011 BEQ 0x003C
003A 9201 ST R0,Z+
003B CFFB RJMP 0x0037
003C 8300 STD Z+0,R16
003D E5E4 LDI R30,0x54
003E E0F0 LDI R31,0
003F E6A0 LDI R26,0x60
0040 E0B0 LDI R27,0
0041 E010 LDI R17,0
0042 35E6 CPI R30,0x56
0043 07F1 CPC R31,R17
0044 F021 BEQ 0x0049
0045 95C8 LPM
0046 9631 ADIW R30,1
0047 920D ST R0,X+
0048 CFF9 RJMP 0x0042
0049 940E01BB CALL _main
_exit:
004B CFFF RJMP _exit
_SetB:
k --> R20
004C 940E01E7 CALL push_gset1
004E 2F40 MOV R20,R16
FILE: D:\单片机编程\iccavr\频率检测\Frequence.c
(0001) //ICC-AVR application builder : 2007-11-21 10:43:58
(0002) // Target : M16
(0003) // Crystal: 1.0000Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007)
(0008) #define OUTPT PORTA //根据连接的端口,设置PORTA
(0009) #define OUTDR DDRA //根据连接的端口,设置DDRA
(0010)
(0011) #define CS 0
(0012) #define CLK 1
(0013) #define DIO 2
(0014) #define KEY 3
(0015)
(0016) #define Delay 2
(0017) #define LongDelay 10
(0018) //用于延时周期数
(0019)
(0020) //Pure Command 纯指令,不带返回值
(0021) #define Reset 0xA4
(0022) #define Test 0xBF
(0023) #define LeftShift 0xA1
(0024) #define RightShift 0xA0
(0025) #define LeftCycle 0xA3
(0026) #define RightCycle 0xA2
(0027)
(0028) //Command with parameter 带参数的指令
(0029) #define DispMethod0 0x80
(0030) #define DispMethod0Data 0x00
(0031) //上面为使用方式0显示数据,
(0032) //DispMethod0数值为 10000 a2 a1 a0,其中a2 a1 a0为显示位0-7地址
(0033) //DispMethod0Data为DP X X X d3 d2 d1 d0 ,其中DP为小数点
(0034) //d3 d2 d1 d0 为 0~9 - E H L P (空)的顺序编码
(0035)
(0036) #define DispMethod1 0xC8
(0037) #define DispMethod1Data 0x00
(0038) //上面为使用方式1显示数据,
(0039) //DispMethod1数值为 11001 a2 a1 a0,其中a2 a1 a0为显示位0-7地址
(0040) //DispMethod1Data为DP X X X d3 d2 d1 d0 ,其中DP为小数点
(0041) //d3 d2 d1 d0 为 0~9 A~F 的顺序编码
(0042)
(0043) #define BlinkControl 0x88
(0044) #define BlinkBit 0x00
(0045) //BlinkBit为d8 d7 d6 d5 d4 d3 d2 d1对应位 其中 0代表闪烁 1不闪烁
(0046)
(0047) #define DisappearControl 0x98
(0048) #define DisappearBit 0x00
(0049) //DisappearBit为d8 d7 d6 d5 d4 d3 d2 d1对应位 其中1代表显示 0消隐
(0050) //消隐不能把所有的位都消隐
(0051)
(0052) #define ReadKeyboard 0x15
(0053) #define ReadASCII
(0054) //ReadASCII为读出的键盘值,从0~3FH 没有键盘按下时为0xFF
(0055) //当ZLG7289A 检测到有效的按键时,KEY 引脚从高电平变为低电平并一直保持
(0056) //到按键结束。在此期间如果ZLG7289A 接收到“读键盘数据指令”则输出当前
(0057) //按键的键盘代码,没有有效按键输出FFH (11111111B)
(0058)
(0059) unsigned char frequence=0;//用于记录频率
(0060) unsigned char save=0;//用于存数
(0061)
(0062) void SetB(unsigned char k)
(0063) {//这里的PORTB根据自己的程序修改
(0064) OUTPT|=(1<<k);
004F E001 LDI R16,1
0050 2F14 MOV R17,R20
0051 940E022C CALL lsl8
0053 B22B IN R2,0x1B
0054 2A20 OR R2,R16
0055 BA2B OUT 0x1B,R2
0056 940E01EA CALL pop_gset1
0058 9508 RET
_ClrB:
l --> R20
0059 940E01E7 CALL push_gset1
005B 2F40 MOV R20,R16
(0065) }
(0066)
(0067) void ClrB(unsigned char l)
(0068) {//这里的PORTB根据自己的程序修改
(0069) OUTPT&=~(1<<l);
005C E001 LDI R16,1
005D 2F14 MOV R17,R20
005E 940E022C CALL lsl8
0060 2E20 MOV R2,R16
0061 9420 COM R2
0062 B23B IN R3,0x1B
0063 2032 AND R3,R2
0064 BA3B OUT 0x1B,R3
0065 940E01EA CALL pop_gset1
0067 9508 RET
_WriteOne7289:
i --> R20
j --> R22
Cmd --> R10
0068 940E01E3 CALL push_gset3
006A 2EA0 MOV R10,R16
(0070) }
(0071)
(0072) void WriteOne7289(unsigned char Cmd)
(0073) {//写入一个字节,可以是单字节命令
(0074) unsigned char i=0;//用于移了几位
006B 2744 CLR R20
(0075) unsigned char j=0;//用于延时
006C 2766 CLR R22
(0076)
(0077) SetB(CS);
006D 2700 CLR R16
006E DFDD RCALL _SetB
(0078) j=Delay;
006F E062 LDI R22,2
(0079) while(j--);
0070 2E26 MOV R2,R22
0071 2433 CLR R3
0072 5061 SUBI R22,1
0073 2022 TST R2
0074 F7D9 BNE 0x0070
(0080)
(0081) ClrB(CLK);
0075 E001 LDI R16,1
0076 DFE2 RCALL _ClrB
(0082) j=Delay;
0077 E062 LDI R22,2
(0083) while(j--);
0078 2E26 MOV R2,R22
0079 2433 CLR R3
007A 5061 SUBI R22,1
007B 2022 TST R2
007C F7D9 BNE 0x0078
(0084) OUTDR|=0x0f;
007D B38A IN R24,0x1A
007E 608F ORI R24,0xF
007F BB8A OUT 0x1A,R24
(0085)
(0086) ClrB(CS);
0080 2700 CLR R16
0081 DFD7 RCALL _ClrB
(0087) j=LongDelay;
0082 E06A LDI R22,0xA
(0088) while(j--);
0083 2E26 MOV R2,R22
0084 2433 CLR R3
0085 5061 SUBI R22,1
0086 2022 TST R2
0087 F7D9 BNE 0x0083
(0089) for(i=0;i<8;i++)
0088 2744 CLR R20
0089 C035 RJMP 0x00BF
(0090) {
(0091) if(0x80&Cmd)
008A FEA7 SBRS R10,7
008B C019 RJMP 0x00A5
(0092) {
(0093) SetB(DIO);
008C E002 LDI R16,2
008D DFBE RCALL _SetB
(0094) j=Delay;
008E E062 LDI R22,2
(0095) while(j--);
008F 2E26 MOV R2,R22
0090 2433 CLR R3
0091 5061 SUBI R22,1
0092 2022 TST R2
0093 F7D9 BNE 0x008F
(0096)
(0097) SetB(CLK);
0094 E001 LDI R16,1
0095 DFB6 RCALL _SetB
(0098) j=Delay;
0096 E062 LDI R22,2
(0099) while(j--);
0097 2E26 MOV R2,R22
0098 2433 CLR R3
0099 5061 SUBI R22,1
009A 2022 TST R2
009B F7D9 BNE 0x0097
(0100)
(0101) ClrB(CLK);
009C E001 LDI R16,1
009D DFBB RCALL _ClrB
(0102) j=Delay;
009E E062 LDI R22,2
(0103) while(j--);
009F 2E26 MOV R2,R22
00A0 2433 CLR R3
00A1 5061 SUBI R22,1
00A2 2022 TST R2
00A3 F7D9 BNE 0x009F
(0104) }
00A4 C018 RJMP 0x00BD
(0105) else
(0106) {
(0107) ClrB(DIO);
00A5 E002 LDI R16,2
00A6 DFB2 RCALL _ClrB
(0108) j=Delay;
00A7 E062 LDI R22,2
(0109) while(j--);
00A8 2E26 MOV R2,R22
00A9 2433 CLR R3
00AA 5061 SUBI R22,1
00AB 2022 TST R2
00AC F7D9 BNE 0x00A8
(0110)
(0111) SetB(CLK);
00AD E001 LDI R16,1
00AE DF9D RCALL _SetB
(0112) j=Delay;
00AF E062 LDI R22,2
(0113) while(j--);
00B0 2E26 MOV R2,R22
00B1 2433 CLR R3
00B2 5061 SUBI R22,1
00B3 2022 TST R2
00B4 F7D9 BNE 0x00B0
(0114)
(0115) ClrB(CLK);
00B5 E001 LDI R16,1
00B6 DFA2 RCALL _ClrB
(0116) j=Delay;
00B7 E062 LDI R22,2
(0117) while(j--);
00B8 2E26 MOV R2,R22
00B9 2433 CLR R3
00BA 5061 SUBI R22,1
00BB 2022 TST R2
00BC F7D9 BNE 0x00B8
(0118) }
(0119) Cmd<<=1;
00BD 0CAA LSL R10
00BE 9543 INC R20
00BF 3048 CPI R20,0x8
00C0 F248 BCS 0x008A
(0120) }
(0121) SetB(CS);
00C1 2700 CLR R16
00C2 DF89 RCALL _SetB
00C3 940E01D9 CALL pop_gset3
00C5 9508 RET
_WriteTwo7289:
i --> R20
j --> R22
Data --> R10
Cmd --> R12
00C6 940E01E1 CALL push_gset4
00C8 2EA2 MOV R10,R18
00C9 2EC0 MOV R12,R16
(0122) }
(0123)
(0124) void WriteTwo7289(unsigned char Cmd,unsigned char Data)
(0125) {//写入一个带参数的命令
(0126) unsigned char i=0;//用于移了几位
00CA 2744 CLR R20
(0127) unsigned char j=0;//用于延时
00CB 2766 CLR R22
(0128)
(0129) SetB(CS);
00CC 2700 CLR R16
00CD DF7E RCALL _SetB
(0130) j=Delay;
00CE E062 LDI R22,2
(0131) while(j--);
00CF 2E26 MOV R2,R22
00D0 2433 CLR R3
00D1 5061 SUBI R22,1
00D2 2022 TST R2
00D3 F7D9 BNE 0x00CF
(0132)
(0133) ClrB(CLK);
00D4 E001 LDI R16,1
00D5 DF83 RCALL _ClrB
(0134) j=Delay;
00D6 E062 LDI R22,2
(0135) while(j--);
00D7 2E26 MOV R2,R22
00D8 2433 CLR R3
00D9 5061 SUBI R22,1
00DA 2022 TST R2
00DB F7D9 BNE 0x00D7
(0136) OUTDR|=0x0f;
00DC B38A IN R24,0x1A
00DD 608F ORI R24,0xF
00DE BB8A OUT 0x1A,R24
(0137)
(0138) ClrB(CS);
00DF 2700 CLR R16
00E0 DF78 RCALL _ClrB
(0139) j=LongDelay;
00E1 E06A LDI R22,0xA
(0140) while(j--);
00E2 2E26 MOV R2,R22
00E3 2433 CLR R3
00E4 5061 SUBI R22,1
00E5 2022 TST R2
00E6 F7D9 BNE 0x00E2
(0141) for(i=0;i<8;i++)
00E7 2744 CLR R20
00E8 C035 RJMP 0x011E
(0142) {//发送命令
(0143) if(0x80&Cmd)
00E9 FEC7 SBRS R12,7
00EA C019 RJMP 0x0104
(0144) {
(0145) SetB(DIO);
00EB E002 LDI R16,2
00EC DF5F RCALL _SetB
(0146) j=Delay;
00ED E062 LDI R22,2
(0147) while(j--);
00EE 2E26 MOV R2,R22
00EF 2433 CLR R3
00F0 5061 SUBI R22,1
00F1 2022 TST R2
00F2 F7D9 BNE 0x00EE
(0148)
(0149) SetB(CLK);
00F3 E001 LDI R16,1
00F4 DF57 RCALL _SetB
(0150) j=Delay;
00F5 E062 LDI R22,2
(0151) while(j--);
00F6 2E26 MOV R2,R22
00F7 2433 CLR R3
00F8 5061 SUBI R22,1
00F9 2022 TST R2
00FA F7D9 BNE 0x00F6
(0152)
(0153) ClrB(CLK);
00FB E001 LDI R16,1
00FC DF5C RCALL _ClrB
(0154) j=Delay;
00FD E062 LDI R22,2
(0155) while(j--);
00FE 2E26 MOV R2,R22
00FF 2433 CLR R3
0100 5061 SUBI R22,1
0101 2022 TST R2
0102 F7D9 BNE 0x00FE
(0156) }
0103 C018 RJMP 0x011C
(0157) else
(0158) {
(0159) ClrB(DIO);
0104 E002 LDI R16,2
0105 DF53 RCALL _ClrB
(0160) j=Delay;
0106 E062 LDI R22,2
(0161) while(j--);
0107 2E26 MOV R2,R22
0108 2433 CLR R3
0109 5061 SUBI R22,1
010A 2022 TST R2
010B F7D9 BNE 0x0107
(0162)
(0163) SetB(CLK);
010C E001 LDI R16,1
010D DF3E RCALL _SetB
(0164) j=Delay;
010E E062 LDI R22,2
(0165) while(j--);
010F 2E26 MOV R2,R22
0110 2433 CLR R3
0111 5061 SUBI R22,1
0112 2022 TST R2
0113 F7D9 BNE 0x010F
(0166)
(0167) ClrB(CLK);
0114 E001 LDI R16,1
0115 DF43 RCALL _ClrB
(0168) j=Delay;
0116 E062 LDI R22,2
(0169) while(j--);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -