📄 display_dhtxx.s
字号:
.module Display_DHTXX.c
.area lit(rom, con, rel)
_LED::
.byte 64,'y
.byte 36,48
.byte 25,18
.byte 2,'x
.byte 0,16
.byte 191,57
.byte 134,175
.byte 255
.dbfile C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
.dbsym e LED _LED A[15:15]kc
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
_PLAY::
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
.dbsym e PLAY _PLAY A[6:6]c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Owner\桌面\产品程序文件\DHT21\新显示程序\Display_DHTXX.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 113
; //ICC-AVR application builder : 2008-4-28 9:22:37
; // Target : M8
; // Crystal: 8.0000Mhz
; /*************************************************************************
; 程序:6_LED
; 功能:湿度传感器显示板(六个数码管显示)
; 公司:奥松电子
; 芯片:M8
; 晶振:内部 2.0000Mhz
; 创建人:木工
; 创建时间:08.05.05
; 修改人:
; 修改时间:
; 修改原因:
; **************************************************************************/
;
; #include <iom8v.h>
; #include <macros.h>
; #include <eeprom.h>
; #include "mu_io.h"
; typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
; typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
; typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
; typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
; typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
; typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
; typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
; typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
;
; /**************************************************************************
; 数码管显示赋值区
; ***************************************************************************/
; #define _a 0x01
; #define _b 0x02
; #define _c 0x04
; #define _d 0x08
; #define _e 0x10
; #define _f 0x20
; #define _g 0x40
; #define _dp 0x80
;
; #define num0 _g //灭的数码管
; #define num1 _a|_d|_e|_f|_g
; #define num2 _c|_f
; #define num3 _e|_f
; #define num4 _a|_d|_e
; #define num5 _b|_e
; #define num6 _b
; #define num7 _d|_e|_f|_g
; #define num8 0x00
; #define num9 _e
; #define num_ _a|_b|_c|_d|_e|_f|_dp
; #define num_11 _a|_d|_e|_f
; #define num_E _b|_c|_dp //13
; #define num_r _a|_b|_c|_d|_f|_dp //14
; #define num_N _a|_b|_c|_d|_e|_f|_g|_dp //15
;
;
;
;
;
; #define dc2 0x04
; #define dc3 0x08
; #define dd 0x03 //数码管控制端口
; #define dd4 0x10
; #define dd5 0x20
; #define dd6 0x40
; #define dd7 0x80
; #define dd2 0x04
; #define dd3 0x08
;
; #define led1 dc3 //使用时要先将数码管全熄灭掉
; #define led2 dd5
; #define led3 dd4
; #define led4 dd7
; #define led5 dd6
; #define led6 dd2
; /**************************************************************************
; I/O空间定义
; ***************************************************************************/
; // B0_IN DDRB &= ~(1 << PB0) /*设置输入*/
; // B0_OUT DDRB |= (1 << PB0) /*设置输出*/
; // B0_CLR PORTB &= ~(1 << PB0) /*置低电平*/
; // B0_SET PORTB |= (1 << PB0) /*置高电平*/
; // B0_R PINB & (1 <<PB0) /*读了电平*/
; /**************************************************************************
; 通讯I/O空间定义
; ***************************************************************************/
; #define COM_IN C5_IN
; #define COM_OUT C5_OUT
; #define COM_CLR C5_CLR
; #define COM_SET C5_SET
; #define COM_R C5_R
;
; /**************************************************************************
; 全局变量定义区
; ***************************************************************************/
; U8 i;
; //U16
; //RM 为临时变量 在RC测电阻中使用
; const U8 LED[ ]={num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,num_,num_11,num_E,num_r,num_N }; //数码管笔形码数组
; U8 PLAY[6]={0,0,0,0,0,0}; //这个数组放在SARM里
; U8 U8FLAG,k;
; U8 U8count,U8temp;
; U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
; U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
; U8 U8comdata;
; U16 ReceiveHighByte;
; U16 ReceiveLowByte;
; /**************************************************************************
; ***************************************************************************/
; void port_init(void)
; {
.dbline 114
; PORTB = 0x00;
clr R2
out 0x18,R2
.dbline 115
; DDRB = 0xFF;
ldi R24,255
out 0x17,R24
.dbline 116
; PORTC = 0x03; //m103 output only
ldi R24,3
out 0x15,R24
.dbline 117
; DDRC = 0x0C;
ldi R24,12
out 0x14,R24
.dbline 118
; PORTD = 0x00;
out 0x12,R2
.dbline 119
; DDRD = 0xF0;
ldi R24,240
out 0x11,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 123
; }
;
; void watchdog_init(void)
; {
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
; i -> <dead>
.even
_init_devices::
.dbline -1
.dbline 130
; //WDR(); //this prevents a timout on enabling
; //WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
; }
;
;
; void init_devices(void)
; {
.dbline 132
; unsigned char i;
; CLI(); //disable all interrupts
cli
.dbline 133
; port_init();
rcall _port_init
.dbline 134
; watchdog_init();
rcall _watchdog_init
.dbline 136
;
; MCUCR = 0x03;
ldi R24,3
out 0x35,R24
.dbline 137
; GICR = 0x00; //关外部中断0
clr R2
out 0x3b,R2
.dbline 138
; TIMSK = 0x00; //关定时器1中断
out 0x39,R2
.dbline 139
; SEI(); //re-enable interrupts
sei
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbend
.dbfunc e Delay _Delay fV
; i -> R16,R17
.even
_Delay::
.dbline -1
.dbline 144
;
; }
;
; void Delay(unsigned int i)
; {
L5:
.dbline 145
L6:
.dbline 145
; while(i--);
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L5
tst R3
brne L5
X0:
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e DelayNS _DelayNS fV
; i -> R20,R21
; dly -> R16,R17
.even
_DelayNS::
rcall push_gset1
.dbline -1
.dbline 148
; }
; void DelayNS (U16 dly) //延时子程序 1.010ms
; {
.dbline 150
rjmp L12
L9:
.dbline 150
wdr
L10:
.dbline 150
subi R16,1
sbci R17,0
L12:
.dbline 150
; U16 i;
; for ( ; dly>0; dly--)WDR();
cpi R16,0
cpc R16,R17
brne L9
X1:
.dbline 151
clr R20
clr R21
rjmp L16
L13:
.dbline 151
L14:
.dbline 151
subi R20,255 ; offset = 1
sbci R21,255
L16:
.dbline 151
; for (i=0; i<1131; i++); //1131
cpi R20,107
ldi R30,4
cpc R21,R30
brlo L13
.dbline -2
L8:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r dly 16 i
.dbend
.dbfunc e DelaymS _DelaymS fV
; i -> R20,R21
; dly -> R16,R17
.even
_DelaymS::
rcall push_gset1
.dbline -1
.dbline 154
; }
; void DelaymS (U16 dly) //延时子程序 1.010ms
; {
.dbline 156
; U16 i;
; for ( ; dly>0; dly--)
rjmp L21
L18:
.dbline 157
; {
.dbline 158
; WDR();
wdr
.dbline 159
clr R20
clr R21
rjmp L25
L22:
.dbline 159
L23:
.dbline 159
subi R20,255 ; offset = 1
sbci R21,255
L25:
.dbline 159
cpi R20,24
ldi R30,1
cpc R21,R30
brlo L22
.dbline 160
L19:
.dbline 156
subi R16,1
sbci R17,0
L21:
.dbline 156
cpi R16,0
cpc R16,R17
brne L18
X2:
.dbline -2
L17:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r dly 16 i
.dbend
.dbfunc e Display _Display fV
.even
_Display::
rcall push_gset5
.dbline -1
.dbline 163
; for (i=0; i<280; i++); //1131
; }
; }
; void Display (void)
; {
.dbline 165
;
; for(i=0;i<=5;i++)
clr R2
sts _i,R2
rjmp L30
L27:
.dbline 166
; {
.dbline 167
; DDRD |= 0XFC;
in R24,0x11
ori R24,252
out 0x11,R24
.dbline 168
; PORTD&=0x03;
in R24,0x12
andi R24,3
out 0x12,R24
.dbline 169
; DDRC |= 0X0C;
in R24,0x14
ori R24,12
out 0x14,R24
.dbline 170
; PORTC&=0xF3;
in R24,0x15
andi R24,243
out 0x15,R24
.dbline 171
; Delay(1);
ldi R16,1
ldi R17,0
rcall _Delay
.dbline 173
;
; switch(i)
lds R20,_i
clr R21
cpi R20,0
cpc R20,R21
breq L34
X3:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L35
cpi R20,2
ldi R30,0
cpc R21,R30
breq L36
cpi R20,3
ldi R30,0
cpc R21,R30
breq L37
cpi R20,4
ldi R30,0
cpc R21,R30
breq L38
cpi R20,5
ldi R30,0
cpc R21,R30
breq L39
rjmp L32
X4:
.dbline 174
; {
L34:
.dbline 175
; case 0: PORTC|=led1;break;
sbi 0x15,3
.dbline 175
rjmp L32
L35:
.dbline 176
; case 1: PORTD|=led2;break;
sbi 0x12,5
.dbline 176
rjmp L32
L36:
.dbline 177
; case 2: PORTD|=led3;break;
sbi 0x12,4
.dbline 177
rjmp L32
L37:
.dbline 178
; case 3: PORTD|=led4;break;
sbi 0x12,7
.dbline 178
rjmp L32
L38:
.dbline 179
; case 4: PORTD|=led5;break;
sbi 0x12,6
.dbline 179
rjmp L32
L39:
.dbline 180
; case 5: PORTD|=led6;break;
sbi 0x12,2
.dbline 180
.dbline 181
; default :break;
L32:
.dbline 183
; }
; PORTB=LED[PLAY[i]] ; //送数据
ldi R24,<_PLAY
ldi R25,>_PLAY
lds R30,_i
clr R31
add R30,R24
adc R31,R25
ldd R30,z+0
clr R31
ldi R24,<_LED
ldi R25,>_LED
add R30,R24
adc R31,R25
lpm R30,Z
out 0x18,R30
.dbline 184
; if((i==0)|(i==2)|(i==3)|(i==5))
lds R2,_i
tst R2
brne L42
ldi R24,1
ldi R25,0
movw R14,R24
rjmp L43
L42:
clr R14
clr R15
L43:
lds R24,_i
cpi R24,2
brne L44
ldi R24,1
ldi R25,0
movw R12,R24
rjmp L45
L44:
clr R12
clr R13
L45:
lds R24,_i
cpi R24,3
brne L46
ldi R24,1
ldi R25,0
movw R10,R24
rjmp L47
L46:
clr R10
clr R11
L47:
lds R24,_i
cpi R24,5
brne L48
ldi R22,1
ldi R23,0
rjmp L49
L48:
clr R22
clr R23
L49:
movw R2,R14
or R2,R12
or R3,R13
or R2,R10
or R3,R11
or R2,R22
or R3,R23
tst R2
brne X5
tst R3
breq L40
X5:
.dbline 185
; {
.dbline 186
; PORTB|=0x80;
sbi 0x18,7
.dbline 187
; }
L40:
.dbline 188
ldi R16,1
ldi R17,0
rcall _DelaymS
.dbline 189
L28:
.dbline 165
lds R24,_i
subi R24,255 ; addi 1
sts _i,R24
L30:
.dbline 165
ldi R24,5
lds R2,_i
cp R24,R2
brlo X6
rjmp L27
X6:
.dbline 190
; DelaymS(1);
; }
; PORTD&=0x03;
in R24,0x12
andi R24,3
out 0x12,R24
.dbline 191
; PORTC&=0xF3;
in R24,0x15
andi R24,243
out 0x15,R24
.dbline -2
L26:
rcall pop_gset5
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay1N _delay1N fV
; Dcount -> R16,R17
.even
_delay1N::
.dbline -1
.dbline 195
; }
;
; void delay1N(unsigned int Dcount) //(1u*Dcount)
; {
rjmp L52
L51:
.dbline 197
.dbline 198
nop
.dbline 199
nop
.dbline 200
nop
.dbline 201
L52:
.dbline 196
; while(Dcount--)
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L51
tst R3
brne L51
X7:
.dbline -2
L50:
.dbline 0 ; func end
ret
.dbsym r Dcount 16 i
.dbend
.dbfunc e Delay_10us _Delay_10us fV
; i -> R16
.even
_Delay_10us::
.dbline -1
.dbline 205
; {
; NOP();
; NOP();
; NOP();
; }
; }
;
; void Delay_10us(void)
; {
.dbline 207
; U8 i; //2M时延时为 10us
; i--;
dec R16
.dbline 208
; i--;
dec R16
.dbline 209
; i--;
dec R16
.dbline 210
; i--;
dec R16
.dbline 211
; i--;
dec R16
.dbline 212
; i--;
dec R16
.dbline 213
; i--;
dec R16
.dbline 214
; i--;
dec R16
.dbline 215
; i--;
dec R16
.dbline 216
; i--;
dec R16
.dbline 217
; i--;
dec R16
.dbline 218
; i--;
dec R16
.dbline 219
; i--;
dec R16
.dbline -2
L54:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e COM _COM fV
; i -> R20
.even
_COM::
rcall push_gset1
.dbline -1
.dbline 224
;
; }
;
; void COM(void)
; {
.dbline 227
;
; U8 i;
; for(i=0;i<8;i++)
clr R20
rjmp L59
L56:
.dbline 228
; {
.dbline 230
;
; U8FLAG=2;
ldi R24,2
sts _U8FLAG,R24
L60:
.dbline 233
L61:
.dbline 233
;
; //while((!P2_0)&&U8FLAG++);
; while((!(COM_R))&&U8FLAG++);
sbic 0x13,5
rjmp L63
lds R2,_U8FLAG
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _U8FLAG,R24
tst R2
brne L60
L63:
.dbline 234
; if(U8FLAG==1)break;
lds R24,_U8FLAG
cpi R24,1
brne L64
.dbline 234
rjmp L58
L64:
.dbline 235
; Delay_10us();
rcall _Delay_10us
.dbline 236
; Delay_10us();
rcall _Delay_10us
.dbline 237
; Delay_10us();
rcall _Delay_10us
.dbline 238
; U8temp=0;
clr R2
sts _U8temp,R2
.dbline 240
; //if(P2_0)U8temp=1;
; if(COM_R)U8temp=1;
sbis 0x13,5
rjmp L66
.dbline 240
ldi R24,1
sts _U8temp,R24
L66:
.dbline 241
; U8FLAG=2;
ldi R24,2
sts _U8FLAG,R24
L68:
.dbline 243
L69:
.dbline 243
; //while((P2_0)&&U8FLAG++);
; while((COM_R)&&U8FLAG++);
sbis 0x13,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -