?? zuopin.lst
字號:
__text_start:
__start:
0013 E5CF LDI R28,0x5F
0014 E0D4 LDI R29,4
0015 BFCD OUT 0x3D,R28
0016 BFDE OUT 0x3E,R29
0017 51C0 SUBI R28,0x10
0018 40D0 SBCI R29,0
0019 EA0A LDI R16,0xAA
001A 8308 STD Y+0,R16
001B 2400 CLR R0
001C E6E0 LDI R30,0x60
001D E0F0 LDI R31,0
001E E010 LDI R17,0
001F 36E0 CPI R30,0x60
0020 07F1 CPC R31,R17
0021 F011 BEQ 0x0024
0022 9201 ST R0,Z+
0023 CFFB RJMP 0x001F
0024 8300 STD Z+0,R16
0025 E2E6 LDI R30,0x26
0026 E0F0 LDI R31,0
0027 E6A0 LDI R26,0x60
0028 E0B0 LDI R27,0
0029 E010 LDI R17,0
002A 32E6 CPI R30,0x26
002B 07F1 CPC R31,R17
002C F021 BEQ 0x0031
002D 95C8 LPM
002E 9631 ADIW R30,1
002F 920D ST R0,X+
0030 CFF9 RJMP 0x002A
0031 D088 RCALL _main
_exit:
0032 CFFF RJMP _exit
FILE: K:\作品\新建文件夾\zuopin.c
(0001) // Target : M8
(0002) // Crystal: 8.0000Mhz //8M晶振
(0003) #include <iom8v.h>
(0004) #include <macros.h>
(0005)
(0006) void delay_us() //微秒延時程序(1us)
(0007) {
(0008) asm("nop");
_delay_us:
0033 0000 NOP
0034 9508 RET
_delay:
time --> R20
0035 D09B RCALL push_gset1
0036 01A8 MOVW R20,R16
(0009) }
(0010) void delay(unsigned int time)
(0011) {
0037 C003 RJMP 0x003B
(0012) while(time)
(0013) { delay_us();
0038 DFFA RCALL _delay_us
(0014) time--;
0039 5041 SUBI R20,1
003A 4050 SBCI R21,0
003B 3040 CPI R20,0
003C 0745 CPC R20,R21
003D F7D1 BNE 0x0038
003E D095 RCALL pop_gset1
003F 9508 RET
(0015) }
(0016) }
(0017)
(0018) void init_1820() //初始化18b20
(0019) {
(0020) PORTD|=0X80; //總線置1
_init_1820:
0040 9A97 SBI 0x12,7
(0021) delay(10);
0041 E00A LDI R16,0xA
0042 E010 LDI R17,0
0043 DFF1 RCALL _delay
(0022) PORTD&=~0x80; //總線置0
0044 9897 CBI 0x12,7
(0023) delay(1200); // 延時等待
0045 EB00 LDI R16,0xB0
0046 E014 LDI R17,4
0047 DFED RCALL _delay
(0024) DDRD&=~0x80;
0048 988F CBI 0x11,7
(0025) PORTD|=0x80; //總線置1
0049 9A97 SBI 0x12,7
(0026) delay(50);
004A E302 LDI R16,0x32
004B E010 LDI R17,0
004C DFE8 RCALL _delay
(0027) DDRD|=0x80;
004D 9A8F SBI 0x11,7
(0028) PORTD|=0x80;
004E 9A97 SBI 0x12,7
(0029) delay(200);
004F EC08 LDI R16,0xC8
0050 E010 LDI R17,0
0051 DFE3 RCALL _delay
0052 9508 RET
_write_1820:
i --> R20
temp --> R22
0053 D07B RCALL push_gset2
0054 2F60 MOV R22,R16
(0030) }
(0031) void write_1820(unsigned char temp) //寫數據
(0032) {
(0033) unsigned char i=0;
0055 2744 CLR R20
(0034) for(;i<8;i++)
0056 C00F RJMP 0x0066
(0035) {
(0036) PORTD&=~0X80;
0057 9897 CBI 0x12,7
(0037) if(temp&(1<<i)) //寫數據,從低位開始
0058 E001 LDI R16,1
0059 2F14 MOV R17,R20
005A D08D RCALL lsl8
005B 2E26 MOV R2,R22
005C 2220 AND R2,R16
005D F011 BEQ 0x0060
(0038) PORTD|=0X80;
005E 9A97 SBI 0x12,7
005F C001 RJMP 0x0061
(0039) else
(0040) PORTD&=~0X80;
0060 9897 CBI 0x12,7
(0041) delay(50);
0061 E302 LDI R16,0x32
0062 E010 LDI R17,0
0063 DFD1 RCALL _delay
(0042) PORTD|=0X80;
0064 9A97 SBI 0x12,7
0065 9543 INC R20
0066 3048 CPI R20,0x8
0067 F378 BCS 0x0057
(0043) }
(0044) PORTD|=0X80;
0068 9A97 SBI 0x12,7
0069 D05B RCALL pop_gset2
006A 9508 RET
_read_1820:
n --> R20
m --> R22
i --> R10
006B D061 RCALL push_gset3
(0045) }
(0046)
(0047) unsigned char read_1820() //讀數據
(0048) {
(0049) unsigned char m,i=0,n=0;
006C 24AA CLR R10
006D 2744 CLR R20
(0050) for(;i<8;i++)
006E C019 RJMP 0x0088
(0051) {
(0052) PORTD&=~0X80;
006F 9897 CBI 0x12,7
(0053) delay(5);
0070 E005 LDI R16,5
0071 E010 LDI R17,0
0072 DFC2 RCALL _delay
(0054) PORTD|=0X80;
0073 9A97 SBI 0x12,7
(0055) DDRD&=~0X80;
0074 988F CBI 0x11,7
(0056) m=(PIND&0X80); //讀數據,從低位開始
0075 B360 IN R22,0x10
0076 7860 ANDI R22,0x80
(0057) if(m)
0077 F029 BEQ 0x007D
(0058) n|=(1<<i);
0078 E001 LDI R16,1
0079 2D1A MOV R17,R10
007A D06D RCALL lsl8
007B 2B40 OR R20,R16
007C C006 RJMP 0x0083
(0059) else
(0060) n&=~(1<<i);
007D E001 LDI R16,1
007E 2D1A MOV R17,R10
007F D068 RCALL lsl8
0080 2E20 MOV R2,R16
0081 9420 COM R2
0082 2142 AND R20,R2
(0061) delay(80);
0083 E500 LDI R16,0x50
0084 E010 LDI R17,0
0085 DFAF RCALL _delay
(0062) DDRD|=0X80;
0086 9A8F SBI 0x11,7
0087 94A3 INC R10
0088 2D8A MOV R24,R10
0089 3088 CPI R24,0x8
008A F320 BCS 0x006F
(0063) }
(0064) return (n);
008B 2F04 MOV R16,R20
008C D03A RCALL pop_gset3
008D 9508 RET
_temperature_read:
tempture --> Y+1
teml --> R22
temh --> R20
i --> R20
008E D040 RCALL push_gset2
(0065) }
(0066) void temperature_read() //讀取溫度值
(0067) {
(0068) unsigned char tempture;
(0069) unsigned char i,temh,teml;
(0070) init_1820(); //復位18b20
008F DFB0 RCALL _init_1820
(0071) write_1820(0xcc); // 發出轉換命令
0090 EC0C LDI R16,0xCC
0091 DFC1 RCALL _write_1820
(0072) write_1820(0x44); //啟動溫度轉換
0092 E404 LDI R16,0x44
0093 DFBF RCALL _write_1820
(0073) delay(400);
0094 E900 LDI R16,0x90
0095 E011 LDI R17,1
0096 DF9E RCALL _delay
(0074) init_1820();
0097 DFA8 RCALL _init_1820
(0075) write_1820(0xcc); //發出讀命令
0098 EC0C LDI R16,0xCC
0099 DFB9 RCALL _write_1820
(0076) write_1820(0xbe); //讀數據
009A EB0E LDI R16,0xBE
009B DFB7 RCALL _write_1820
(0077) teml=read_1820();
009C DFCE RCALL _read_1820
009D 2F60 MOV R22,R16
(0078) temh=read_1820();
009E DFCC RCALL _read_1820
009F 2F40 MOV R20,R16
(0079) UDR=teml;
00A0 B96C OUT 0x0C,R22
(0080) delay(150);
00A1 E906 LDI R16,0x96
00A2 E010 LDI R17,0
00A3 DF91 RCALL _delay
(0081) UDR=temh;
00A4 B94C OUT 0x0C,R20
(0082) for(i=0;i<100;i++) //延時等待
00A5 2744 CLR R20
00A6 C004 RJMP 0x00AB
(0083) delay(500);
00A7 EF04 LDI R16,0xF4
00A8 E011 LDI R17,1
00A9 DF8B RCALL _delay
00AA 9543 INC R20
00AB 3644 CPI R20,0x64
00AC F3D0 BCS 0x00A7
00AD D017 RCALL pop_gset2
00AE 9508 RET
(0084) }
(0085) //UART0 initialize
(0086) // desired baud rate: 9600
(0087) // actual: baud rate:9615 (0.2%)
(0088) // char size: 8 bit
(0089) // parity: Disabled
(0090) void uart0_init(void) //初始化uart
(0091) {
(0092) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
00AF 2422 CLR R2
00B0 B82A OUT 0x0A,R2
(0093) UCSRA = 0x00;
00B1 B82B OUT 0x0B,R2
(0094) UCSRC = BIT(URSEL) | 0x06;
00B2 E886 LDI R24,0x86
00B3 BD80 OUT 0x20,R24
(0095) UBRRL = 0x33; //set baud rate lo
00B4 E383 LDI R24,0x33
00B5 B989 OUT 0x09,R24
(0096) UBRRH = 0x00; //set baud rate hi
00B6 BC20 OUT 0x20,R2
(0097) UCSRB = 0x18;
00B7 E188 LDI R24,0x18
00B8 B98A OUT 0x0A,R24
00B9 9508 RET
(0098) }
(0099)
(0100) void main(void) //主函數
(0101) {
(0102) delay(1000);
_main:
00BA EE08 LDI R16,0xE8
00BB E013 LDI R17,3
00BC DF78 RCALL _delay
(0103) DDRD=0Xff;
00BD EF8F LDI R24,0xFF
00BE BB81 OUT 0x11,R24
(0104) PORTD=0Xff;
00BF BB82 OUT 0x12,R24
(0105) uart0_init();
00C0 DFEE RCALL _uart0_init
00C1 C001 RJMP 0x00C3
(0106) while(1)
(0107) temperature_read();
FILE: <library>
00C2 DFCB RCALL _temperature_read
00C3 CFFE RJMP 0x00C2
00C4 9508 RET
pop_gset2:
00C5 E0E2 LDI R30,2
00C6 C00E RJMP pop
pop_gset3:
00C7 E0E4 LDI R30,4
00C8 C00C RJMP pop
push_gset5:
00C9 92FA ST R15,-Y
00CA 92EA ST R14,-Y
push_gset4:
00CB 92DA ST R13,-Y
00CC 92CA ST R12,-Y
push_gset3:
00CD 92BA ST R11,-Y
00CE 92AA ST R10,-Y
push_gset2:
00CF 937A ST R23,-Y
00D0 936A ST R22,-Y
push_gset1:
00D1 935A ST R21,-Y
00D2 934A ST R20,-Y
00D3 9508 RET
pop_gset1:
00D4 E0E1 LDI R30,1
pop:
00D5 9149 LD R20,Y+
00D6 9159 LD R21,Y+
00D7 FDE0 SBRC R30,0
00D8 9508 RET
00D9 9169 LD R22,Y+
00DA 9179 LD R23,Y+
00DB FDE1 SBRC R30,1
00DC 9508 RET
00DD 90A9 LD R10,Y+
00DE 90B9 LD R11,Y+
00DF FDE2 SBRC R30,2
00E0 9508 RET
00E1 90C9 LD R12,Y+
00E2 90D9 LD R13,Y+
00E3 FDE3 SBRC R30,3
00E4 9508 RET
00E5 90E9 LD R14,Y+
00E6 90F9 LD R15,Y+
00E7 9508 RET
lsl8:
00E8 2311 TST R17
00E9 F019 BEQ 0x00ED
00EA 0F00 LSL R16
00EB 951A DEC R17
00EC CFFB RJMP lsl8
00ED 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -