📄 display_dhtxx.lst
字号:
__text_start:
__start:
001E E5CF LDI R28,0x5F
001F E0D4 LDI R29,4
0020 BFCD OUT 0x3D,R28
0021 BFDE OUT 0x3E,R29
0022 51C0 SUBI R28,0x10
0023 40D0 SBCI R29,0
0024 EA0A LDI R16,0xAA
0025 8308 STD Y+0,R16
0026 2400 CLR R0
0027 E6E6 LDI R30,0x66
0028 E0F0 LDI R31,0
0029 E010 LDI R17,0
002A 37EA CPI R30,0x7A
002B 07F1 CPC R31,R17
002C F011 BEQ 0x002F
002D 9201 ST R0,Z+
002E CFFB RJMP 0x002A
002F 8300 STD Z+0,R16
0030 E3E5 LDI R30,0x35
0031 E0F0 LDI R31,0
0032 E6A0 LDI R26,0x60
0033 E0B0 LDI R27,0
0034 E010 LDI R17,0
0035 33EB CPI R30,0x3B
0036 07F1 CPC R31,R17
0037 F021 BEQ 0x003C
0038 95C8 LPM
0039 9631 ADIW R30,1
003A 920D ST R0,X+
003B CFF9 RJMP 0x0035
003C D284 RCALL _main
_exit:
003D CFFF RJMP _exit
FILE: C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
(0001) //ICC-AVR application builder : 2008-4-28 9:22:37
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) /*************************************************************************
(0005) 程序:6_LED
(0006) 功能:湿度传感器显示板(六个数码管显示)
(0007) 公司:奥松电子
(0008) 芯片:M8
(0009) 晶振:内部 2.0000Mhz
(0010) 创建人:木工
(0011) 创建时间:08.05.05
(0012) 修改人:
(0013) 修改时间:
(0014) 修改原因:
(0015) **************************************************************************/
(0016)
(0017) #include <iom8v.h>
(0018) #include <macros.h>
(0019) #include <eeprom.h>
(0020) #include "mu_io.h"
(0021) typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
(0022) typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
(0023) typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
(0024) typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
(0025) typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
(0026) typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
(0027) typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
(0028) typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
(0029)
(0030) /**************************************************************************
(0031) 数码管显示赋值区
(0032) ***************************************************************************/
(0033) #define _a 0x01
(0034) #define _b 0x02
(0035) #define _c 0x04
(0036) #define _d 0x08
(0037) #define _e 0x10
(0038) #define _f 0x20
(0039) #define _g 0x40
(0040) #define _dp 0x80
(0041)
(0042) #define num0 _g //灭的数码管
(0043) #define num1 _a|_d|_e|_f|_g
(0044) #define num2 _c|_f
(0045) #define num3 _e|_f
(0046) #define num4 _a|_d|_e
(0047) #define num5 _b|_e
(0048) #define num6 _b
(0049) #define num7 _d|_e|_f|_g
(0050) #define num8 0x00
(0051) #define num9 _e
(0052) #define num_ _a|_b|_c|_d|_e|_f|_dp
(0053) #define num_11 _a|_d|_e|_f
(0054) #define num_E _b|_c|_dp //13
(0055) #define num_r _a|_b|_c|_d|_f|_dp //14
(0056) #define num_N _a|_b|_c|_d|_e|_f|_g|_dp //15
(0057)
(0058)
(0059)
(0060)
(0061)
(0062) #define dc2 0x04
(0063) #define dc3 0x08
(0064) #define dd 0x03 //数码管控制端口
(0065) #define dd4 0x10
(0066) #define dd5 0x20
(0067) #define dd6 0x40
(0068) #define dd7 0x80
(0069) #define dd2 0x04
(0070) #define dd3 0x08
(0071)
(0072) #define led1 dc3 //使用时要先将数码管全熄灭掉
(0073) #define led2 dd5
(0074) #define led3 dd4
(0075) #define led4 dd7
(0076) #define led5 dd6
(0077) #define led6 dd2
(0078) /**************************************************************************
(0079) I/O空间定义
(0080) ***************************************************************************/
(0081) // B0_IN DDRB &= ~(1 << PB0) /*设置输入*/
(0082) // B0_OUT DDRB |= (1 << PB0) /*设置输出*/
(0083) // B0_CLR PORTB &= ~(1 << PB0) /*置低电平*/
(0084) // B0_SET PORTB |= (1 << PB0) /*置高电平*/
(0085) // B0_R PINB & (1 <<PB0) /*读了电平*/
(0086) /**************************************************************************
(0087) 通讯I/O空间定义
(0088) ***************************************************************************/
(0089) #define COM_IN C5_IN
(0090) #define COM_OUT C5_OUT
(0091) #define COM_CLR C5_CLR
(0092) #define COM_SET C5_SET
(0093) #define COM_R C5_R
(0094)
(0095) /**************************************************************************
(0096) 全局变量定义区
(0097) ***************************************************************************/
(0098) U8 i;
(0099) //U16
(0100) //RM 为临时变量 在RC测电阻中使用
(0101) const U8 LED[ ]={num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,num_,num_11,num_E,num_r,num_N }; //数码管笔形码数组
(0102) U8 PLAY[6]={0,0,0,0,0,0}; //这个数组放在SARM里
(0103) U8 U8FLAG,k;
(0104) U8 U8count,U8temp;
(0105) U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
(0106) U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
(0107) U8 U8comdata;
(0108) U16 ReceiveHighByte;
(0109) U16 ReceiveLowByte;
(0110) /**************************************************************************
(0111) ***************************************************************************/
(0112) void port_init(void)
(0113) {
(0114) PORTB = 0x00;
_port_init:
003E 2422 CLR R2
003F BA28 OUT 0x18,R2
(0115) DDRB = 0xFF;
0040 EF8F LDI R24,0xFF
0041 BB87 OUT 0x17,R24
(0116) PORTC = 0x03; //m103 output only
0042 E083 LDI R24,3
0043 BB85 OUT 0x15,R24
(0117) DDRC = 0x0C;
0044 E08C LDI R24,0xC
0045 BB84 OUT 0x14,R24
(0118) PORTD = 0x00;
0046 BA22 OUT 0x12,R2
(0119) DDRD = 0xF0;
0047 EF80 LDI R24,0xF0
0048 BB81 OUT 0x11,R24
0049 9508 RET
(0120) }
(0121)
(0122) void watchdog_init(void)
(0123) {
_watchdog_init:
004A 9508 RET
(0124) //WDR(); //this prevents a timout on enabling
(0125) //WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
(0126) }
(0127)
(0128)
(0129) void init_devices(void)
(0130) {
(0131) unsigned char i;
(0132) CLI(); //disable all interrupts
_init_devices:
i --> Y+1
004B 94F8 BCLR 7
(0133) port_init();
004C DFF1 RCALL _port_init
(0134) watchdog_init();
004D DFFC RCALL _watchdog_init
(0135)
(0136) MCUCR = 0x03;
004E E083 LDI R24,3
004F BF85 OUT 0x35,R24
(0137) GICR = 0x00; //关外部中断0
0050 2422 CLR R2
0051 BE2B OUT 0x3B,R2
(0138) TIMSK = 0x00; //关定时器1中断
0052 BE29 OUT 0x39,R2
(0139) SEI(); //re-enable interrupts
0053 9478 BSET 7
0054 9508 RET
(0140)
(0141) }
(0142)
(0143) void Delay(unsigned int i)
(0144) {
(0145) while(i--);
_Delay:
i --> R16
0055 D2DB RCALL 0x0331
0056 F7F1 BNE 0x0055
0057 2033 TST R3
0058 F7E1 BNE 0x0055
0059 9508 RET
_DelayNS:
i --> R20
dly --> R16
005A D2A6 RCALL push_gset1
(0146) }
(0147) void DelayNS (U16 dly) //延时子程序 1.010ms
(0148) {
(0149) U16 i;
(0150) for ( ; dly>0; dly--)WDR();
005B C003 RJMP 0x005F
005C 95A8 WDR
005D 5001 SUBI R16,1
005E 4010 SBCI R17,0
005F 3000 CPI R16,0
0060 0701 CPC R16,R17
0061 F7D1 BNE 0x005C
(0151) for (i=0; i<1131; i++); //1131
0062 2744 CLR R20
0063 2755 CLR R21
0064 C002 RJMP 0x0067
0065 5F4F SUBI R20,0xFF
0066 4F5F SBCI R21,0xFF
0067 364B CPI R20,0x6B
0068 E0E4 LDI R30,4
0069 075E CPC R21,R30
006A F3D0 BCS 0x0065
006B D298 RCALL pop_gset1
006C 9508 RET
_DelaymS:
i --> R20
dly --> R16
006D D293 RCALL push_gset1
(0152) }
(0153) void DelaymS (U16 dly) //延时子程序 1.010ms
(0154) {
(0155) U16 i;
(0156) for ( ; dly>0; dly--)
006E C00C RJMP 0x007B
(0157) {
(0158) WDR();
006F 95A8 WDR
(0159) for (i=0; i<280; i++); //1131
0070 2744 CLR R20
0071 2755 CLR R21
0072 C002 RJMP 0x0075
0073 5F4F SUBI R20,0xFF
0074 4F5F SBCI R21,0xFF
0075 3148 CPI R20,0x18
0076 E0E1 LDI R30,1
0077 075E CPC R21,R30
0078 F3D0 BCS 0x0073
0079 5001 SUBI R16,1
007A 4010 SBCI R17,0
007B 3000 CPI R16,0
007C 0701 CPC R16,R17
007D F789 BNE 0x006F
007E D285 RCALL pop_gset1
007F 9508 RET
_Display:
0080 D278 RCALL push_gset5
(0160) }
(0161) }
(0162) void Display (void)
(0163) {
(0164)
(0165) for(i=0;i<=5;i++)
0081 2422 CLR R2
0082 92200079 STS i,R2
0084 C07F RJMP 0x0104
(0166) {
(0167) DDRD |= 0XFC;
0085 B381 IN R24,0x11
0086 6F8C ORI R24,0xFC
0087 BB81 OUT 0x11,R24
(0168) PORTD&=0x03;
0088 B382 IN R24,0x12
0089 7083 ANDI R24,3
008A BB82 OUT 0x12,R24
(0169) DDRC |= 0X0C;
008B B384 IN R24,0x14
008C 608C ORI R24,0xC
008D BB84 OUT 0x14,R24
(0170) PORTC&=0xF3;
008E B385 IN R24,0x15
008F 7F83 ANDI R24,0xF3
0090 BB85 OUT 0x15,R24
(0171) Delay(1);
0091 E001 LDI R16,1
0092 E010 LDI R17,0
0093 DFC1 RCALL _Delay
(0172)
(0173) switch(i)
0094 91400079 LDS R20,i
0096 2755 CLR R21
0097 3040 CPI R20,0
0098 0745 CPC R20,R21
0099 F0A9 BEQ 0x00AF
009A 3041 CPI R20,1
009B E0E0 LDI R30,0
009C 075E CPC R21,R30
009D F099 BEQ 0x00B1
009E 3042 CPI R20,2
009F E0E0 LDI R30,0
00A0 075E CPC R21,R30
00A1 F089 BEQ 0x00B3
00A2 3043 CPI R20,3
00A3 E0E0 LDI R30,0
00A4 075E CPC R21,R30
00A5 F079 BEQ 0x00B5
00A6 3044 CPI R20,4
00A7 E0E0 LDI R30,0
00A8 075E CPC R21,R30
00A9 F069 BEQ 0x00B7
00AA 3045 CPI R20,5
00AB E0E0 LDI R30,0
00AC 075E CPC R21,R30
00AD F059 BEQ 0x00B9
00AE C00B RJMP 0x00BA
(0174) {
(0175) case 0: PORTC|=led1;break;
00AF 9AAB SBI 0x15,3
00B0 C009 RJMP 0x00BA
(0176) case 1: PORTD|=led2;break;
00B1 9A95 SBI 0x12,5
00B2 C007 RJMP 0x00BA
(0177) case 2: PORTD|=led3;break;
00B3 9A94 SBI 0x12,4
00B4 C005 RJMP 0x00BA
(0178) case 3: PORTD|=led4;break;
00B5 9A97 SBI 0x12,7
00B6 C003 RJMP 0x00BA
(0179) case 4: PORTD|=led5;break;
00B7 9A96 SBI 0x12,6
00B8 C001 RJMP 0x00BA
(0180) case 5: PORTD|=led6;break;
00B9 9A92 SBI 0x12,2
(0181) default :break;
(0182) }
(0183) PORTB=LED[PLAY[i]] ; //送数据
00BA E680 LDI R24,0x60
00BB E090 LDI R25,0
00BC 91E00079 LDS R30,i
00BE 27FF CLR R31
00BF 0FE8 ADD R30,R24
00C0 1FF9 ADC R31,R25
00C1 81E0 LDD R30,Z+0
00C2 27FF CLR R31
00C3 E286 LDI R24,0x26
00C4 E090 LDI R25,0
00C5 0FE8 ADD R30,R24
00C6 1FF9 ADC R31,R25
00C7 91E4 LPM R30,0(Z)
00C8 BBE8 OUT 0x18,R30
(0184) if((i==0)|(i==2)|(i==3)|(i==5))
00C9 90200079 LDS R2,i
00CB 2022 TST R2
00CC F421 BNE 0x00D1
00CD E081 LDI R24,1
00CE E090 LDI R25,0
00CF 017C MOVW R14,R24
00D0 C002 RJMP 0x00D3
00D1 24EE CLR R14
00D2 24FF CLR R15
00D3 91800079 LDS R24,i
00D5 3082 CPI R24,2
00D6 F421 BNE 0x00DB
00D7 E081 LDI R24,1
00D8 E090 LDI R25,0
00D9 016C MOVW R12,R24
00DA C002 RJMP 0x00DD
00DB 24CC CLR R12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -