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

📄 frequence.lst

📁 使用Mega16编制的频率检测程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -