📄 shiyan.lst
字号:
__text_start:
__start:
39 E5CF LDI R28,0x5F
3A E0D4 LDI R29,4
3B BFCD OUT 0x3D,R28
3C BFDE OUT 0x3E,R29
3D 51CE SUBI R28,0x1E
3E 40D0 SBCI R29,0
3F EA0A LDI R16,0xAA
40 8308 STD Y+0,R16
41 2400 CLR R0
42 E7ED LDI R30,0x7D
43 E0F0 LDI R31,0
44 E010 LDI R17,0
45 37ED CPI R30,0x7D
46 07F1 CPC R31,R17
47 F011 BEQ 0x004A
48 9201 ST R0,Z+
49 CFFB RJMP 0x0045
4A 8300 STD Z+0,R16
4B E5E4 LDI R30,0x54
4C E0F0 LDI R31,0
4D E6A0 LDI R26,0x60
4E E0B0 LDI R27,0
4F E010 LDI R17,0
50 E000 LDI R16,0
51 BF0B OUT 0x3B,R16
52 37E1 CPI R30,0x71
53 07F1 CPC R31,R17
54 F021 BEQ 0x0059
55 95C8 LPM
56 9631 ADIW R30,1
57 920D ST R0,X+
58 CFF9 RJMP 0x0052
59 940E 0172 CALL _main
_exit:
5B CFFF RJMP _exit
_delay1ms:
j --> R20
i --> R16
5C 934A ST R20,-Y
5D 935A ST R21,-Y
FILE: C:\DOCUME~1\徐胜辉\桌面\新建文件夹\shiyan.c
(0001) #include<iom16v.h>
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004) #define RS_1 PORTA|=(1<<3)
(0005) #define RS_0 PORTA&=~(1<<3)
(0006) #define RW_1 PORTA|=(1<<4)
(0007) #define RW_0 PORTA&=~(1<<4)
(0008) #define EN_1 PORTA|=(1<<5)
(0009) #define EN_0 PORTA&=~(1<<5)
(0010) unsigned char dispcode[]="0123456789ABCDEF";
(0011) unsigned char str1[]={"number is: "};
(0012)
(0013) /*************************lcd1602程序**************************/
(0014) void delay1ms(uint i)//延时1毫秒(不够精确的)
(0015) {
(0016) unsigned int j;
(0017) for(;i>0;i--)
5E C00B RJMP 0x006A
(0018) for(j=0;j<1142;j++);
5F 2744 CLR R20
60 2755 CLR R21
61 C002 RJMP 0x0064
62 5F4F SUBI R20,0xFF
63 4F5F SBCI R21,0xFF
64 3746 CPI R20,0x76
65 E0E4 LDI R30,4
66 075E CPC R21,R30
67 F3D0 BCS 0x0062
68 5001 SUBI R16,1
69 4010 SBCI R17,0
6A 3000 CPI R16,0
6B 0701 CPC R16,R17
6C F791 BNE 0x005F
6D 9159 LD R21,Y+
6E 9149 LD R20,Y+
6F 9508 RET
_wr_com:
com --> R10
70 92AA ST R10,-Y
71 2EA0 MOV R10,R16
(0019) }
(0020) void wr_com(unsigned char com)//写指令//
(0021) {
(0022) delay1ms(1);
72 E001 LDI R16,1
73 E010 LDI R17,0
74 DFE7 RCALL _delay1ms
(0023) RS_0;
75 98DB CBI 0x1B,3
(0024) RW_0;
76 98DC CBI 0x1B,4
(0025) EN_0;
77 98DD CBI 0x1B,5
(0026) PORTB=com;
78 BAA8 OUT 0x18,R10
(0027) delay1ms(1);
79 E001 LDI R16,1
7A E010 LDI R17,0
7B DFE0 RCALL _delay1ms
(0028) EN_1;
7C 9ADD SBI 0x1B,5
(0029) delay1ms(1);
7D E001 LDI R16,1
7E E010 LDI R17,0
7F DFDC RCALL _delay1ms
(0030) EN_0;
80 98DD CBI 0x1B,5
81 90A9 LD R10,Y+
82 9508 RET
_wr_dat:
dat --> R10
83 92AA ST R10,-Y
84 2EA0 MOV R10,R16
(0031) }
(0032) void wr_dat(unsigned char dat)//写数据//
(0033) {
(0034) delay1ms(1);
85 E001 LDI R16,1
86 E010 LDI R17,0
87 DFD4 RCALL _delay1ms
(0035) RS_1;
88 9ADB SBI 0x1B,3
(0036) RW_0;
89 98DC CBI 0x1B,4
(0037) EN_0;
8A 98DD CBI 0x1B,5
(0038) PORTB=dat;
8B BAA8 OUT 0x18,R10
(0039) delay1ms(1);
8C E001 LDI R16,1
8D E010 LDI R17,0
8E DFCD RCALL _delay1ms
(0040) EN_1;
8F 9ADD SBI 0x1B,5
(0041) delay1ms(1);
90 E001 LDI R16,1
91 E010 LDI R17,0
92 DFC9 RCALL _delay1ms
(0042) EN_0;
93 98DD CBI 0x1B,5
94 90A9 LD R10,Y+
95 9508 RET
(0043) }
(0044) void lcd_init()//初始化设置//
(0045) {
(0046) DDRB|=0xFF; /*I/O口方向设置*/
_lcd_init:
96 B387 IN R24,0x17
97 6F8F ORI R24,0xFF
98 BB87 OUT 0x17,R24
(0047) DDRA|=(1<<3)|(1<<4)|(1<<5);
99 B38A IN R24,0x1A
9A 6388 ORI R24,0x38
9B BB8A OUT 0x1A,R24
(0048) delay1ms(15);
9C E00F LDI R16,0xF
9D E010 LDI R17,0
9E DFBD RCALL _delay1ms
(0049) wr_com(0x38);delay1ms(5);
9F E308 LDI R16,0x38
A0 DFCF RCALL _wr_com
A1 E005 LDI R16,5
A2 E010 LDI R17,0
A3 DFB8 RCALL _delay1ms
(0050) wr_com(0x08);delay1ms(5);
A4 E008 LDI R16,0x8
A5 DFCA RCALL _wr_com
A6 E005 LDI R16,5
A7 E010 LDI R17,0
A8 DFB3 RCALL _delay1ms
(0051) wr_com(0x01);delay1ms(5);
A9 E001 LDI R16,1
AA DFC5 RCALL _wr_com
AB E005 LDI R16,5
AC E010 LDI R17,0
AD DFAE RCALL _delay1ms
(0052) wr_com(0x06);delay1ms(5);
AE E006 LDI R16,6
AF DFC0 RCALL _wr_com
B0 E005 LDI R16,5
B1 E010 LDI R17,0
B2 DFA9 RCALL _delay1ms
(0053) wr_com(0x0c);delay1ms(5);
B3 E00C LDI R16,0xC
B4 DFBB RCALL _wr_com
B5 E005 LDI R16,5
B6 E010 LDI R17,0
B7 DFA4 RCALL _delay1ms
B8 9508 RET
_display:
p --> R20
B9 934A ST R20,-Y
BA 935A ST R21,-Y
BB 01A8 MOVW R20,R16
(0054) }
(0055)
(0056) void display(unsigned char *p)//显示//
(0057) {
BC C008 RJMP 0x00C5
(0058) while(*p!='\0')
(0059) {
(0060) wr_dat(*p);
BD 01FA MOVW R30,R20
BE 8100 LDD R16,Z+0
BF DFC3 RCALL _wr_dat
(0061) p++;
C0 5F4F SUBI R20,0xFF
C1 4F5F SBCI R21,0xFF
(0062) delay1ms(1);
C2 E001 LDI R16,1
C3 E010 LDI R17,0
C4 DF97 RCALL _delay1ms
C5 01FA MOVW R30,R20
C6 8020 LDD R2,Z+0
C7 2022 TST R2
C8 F7A1 BNE 0x00BD
C9 9159 LD R21,Y+
CA 9149 LD R20,Y+
CB 9508 RET
(0063) }
(0064) }
(0065)
(0066) /******************************ds1820程序***************************************/
(0067) void delay_18B20(int time)
(0068) {
(0069) do
(0070) time--;
_delay_18B20:
time --> R16
CC 5001 SUBI R16,1
CD 4010 SBCI R17,0
(0071) while(time>1);
CE E081 LDI R24,1
CF E090 LDI R25,0
D0 1780 CP R24,R16
D1 0791 CPC R25,R17
D2 F3CC BLT 0x00CC
D3 9508 RET
_ds1820rst:
ack --> R20
D4 934A ST R20,-Y
(0072) }
(0073) unsigned char ds1820rst()/*ds1820复位*/
(0074) {
(0075) unsigned char ack;
(0076) DDRA|=0x01;
D5 9AD0 SBI 0x1A,0
(0077) PORTA&=0xfe;
D6 B38B IN R24,0x1B
D7 7F8E ANDI R24,0xFE
D8 BB8B OUT 0x1B,R24
(0078) delay_18B20(500);
D9 EF04 LDI R16,0xF4
DA E011 LDI R17,1
DB DFF0 RCALL _delay_18B20
(0079) PORTA|=0x01;
DC 9AD8 SBI 0x1B,0
(0080) DDRA&=0xfe;
DD B38A IN R24,0x1A
DE 7F8E ANDI R24,0xFE
DF BB8A OUT 0x1A,R24
(0081) delay_18B20(75);
E0 E40B LDI R16,0x4B
E1 E010 LDI R17,0
E2 DFE9 RCALL _delay_18B20
(0082) ack=PINA;
E3 B349 IN R20,0x19
(0083) ack&=0x01;
E4 7041 ANDI R20,1
(0084) delay_18B20(500);
E5 EF04 LDI R16,0xF4
E6 E011 LDI R17,1
E7 DFE4 RCALL _delay_18B20
(0085) return ack;
E8 2F04 MOV R16,R20
E9 9149 LD R20,Y+
EA 9508 RET
_ds1820rd:
byte --> R20
temp --> R10
i --> R22
EB 940E 01A3 CALL push_xgsetF00C
(0086) }
(0087)
(0088) unsigned char ds1820rd()/*读数据*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -