📄 main.lis
字号:
00A4 .dbline 76
00A4 .dbline 77
00A4 ; default: break ;
00A4 .dbline 79
00A4 ; }
00A4 ; }
00A4 18C0 xjmp L8
00A6 L7:
00A6 .dbline 80
00A6 ; else if (string[i]==fend) {end=i-1;start=1;}
00A6 80E0 ldi R24,<_string
00A8 90E0 ldi R25,>_string
00AA E0910000 lds R30,_i
00AE FF27 clr R31
00B0 E80F add R30,R24
00B2 F91F adc R31,R25
00B4 8081 ldd R24,z+0
00B6 8C33 cpi R24,60
00B8 49F4 brne L15
00BA .dbline 80
00BA .dbline 80
00BA 80910000 lds R24,_i
00BE 8150 subi R24,1
00C0 80930300 sts _end,R24
00C4 .dbline 80
00C4 81E0 ldi R24,1
00C6 80930400 sts _start,R24
00CA .dbline 80
00CA 05C0 xjmp L16
00CC L15:
00CC .dbline 82
00CC ;
00CC ; else i++;
00CC 80910000 lds R24,_i
00D0 8F5F subi R24,255 ; addi 1
00D2 80930000 sts _i,R24
00D6 L16:
00D6 L8:
00D6 .dbline -2
00D6 L6:
00D6 2990 ld R2,y+
00D8 2FBE out 0x3f,R2
00DA F991 ld R31,y+
00DC E991 ld R30,y+
00DE 9991 ld R25,y+
00E0 8991 ld R24,y+
00E2 1991 ld R17,y+
00E4 0991 ld R16,y+
00E6 2990 ld R2,y+
00E8 .dbline 0 ; func end
00E8 1895 reti
00EA .dbend
00EA .dbfunc e ad_1 _ad_1 fi
00EA ; value -> R16,R17
.even
00EA _ad_1::
00EA .dbline -1
00EA .dbline 95
00EA ;
00EA ; }
00EA ;
00EA ; /******************************************************************************
00EA ; 函数名称:1号通道采集函数
00EA ; 函数功能:返回采集一次的模拟量
00EA ; 函数参数:无
00EA ; 返回值 : 16 位型 ,变量
00EA ;
00EA ; ******************************************************************************/
00EA ;
00EA ; unsigned int ad_1(void) //ad0采集函数,返回ad0的值
00EA ; {
00EA .dbline 97
00EA ; unsigned int value;
00EA ; ADMUX=0xc1;
00EA 81EC ldi R24,193
00EC 87B9 out 0x7,R24
00EE .dbline 98
00EE ; ADCSR=0x86;
00EE 86E8 ldi R24,134
00F0 86B9 out 0x6,R24
00F2 .dbline 99
00F2 ; BIT_SET(ADCSR,ADSC);
00F2 369A sbi 0x6,6
00F4 L18:
00F4 .dbline 100
00F4 L19:
00F4 .dbline 100
00F4 ; while(ADCSR & (1<<ADSC)); //waitting ADC complete
00F4 3699 sbic 0x6,6
00F6 FECF rjmp L18
00F8 .dbline 101
00F8 ; value=ADCL; //Read 8 low bits first (important)
00F8 04B1 in R16,0x4
00FA 1127 clr R17
00FC .dbline 102
00FC ; value|=( int)ADCH << 8; //read 2 high bits and shift into top byte
00FC 25B0 in R2,0x5
00FE 3324 clr R3
0100 322C mov R3,R2
0102 2224 clr R2
0104 0229 or R16,R2
0106 1329 or R17,R3
0108 .dbline 103
0108 ; return(value);
0108 .dbline -2
0108 L17:
0108 .dbline 0 ; func end
0108 0895 ret
010A .dbsym r value 16 i
010A .dbend
010A .dbfunc e main _main fV
010A ; temp -> <dead>
010A ; vdata -> R10,R11
010A ; data -> R12,R13
010A ; m -> y+0
.even
010A _main::
010A 2497 sbiw R28,4
010C .dbline -1
010C .dbline 109
010C ; }
010C ;
010C ;
010C ;
010C ; void main(void)
010C ; {
010C .dbline 113
010C ; /*****************************************************************************
010C ; 变量定义
010C ; *******************************************************************************/
010C ; unsigned long int m=0 ; //温度采集后的值
010C 40E0 ldi R20,0
010E 50E0 ldi R21,0
0110 60E0 ldi R22,0
0112 70E0 ldi R23,0
0114 FE01 movw R30,R28
0116 4083 std z+0,R20
0118 5183 std z+1,R21
011A 6283 std z+2,R22
011C 7383 std z+3,R23
011E .dbline 121
011E ; char temp ; //循环变量
011E ; unsigned int data,vdata ; //温度和电压的值
011E ; /******************************************************************************
011E ; 端口初始化和晶体频率校正
011E ; ******************************************************************************/
011E ;
011E ;
011E ; port_init() ; //端口初始话~~~!
011E 70DF xcall _port_init
0120 .dbline 122
0120 ; OSCCAL=0xb0 ;
0120 80EB ldi R24,176
0122 81BF out 0x31,R24
0124 .dbline 128
0124 ;
0124 ; /*------------------------------------------------------------------
0124 ; 初始化完成,初始化温度计,初始化液晶
0124 ; --------------------------------------------------------------------*/
0124 ;
0124 ; resetDS18B20() ; //初始化温度计
0124 0E940000 xcall _resetDS18B20
0128 .dbline 129
0128 ; DDRA|=LCD_DATA ; // 数据为输出
0128 8AB3 in R24,0x1a
012A 806F ori R24,240
012C 8ABB out 0x1a,R24
012E .dbline 130
012E ; DDRC|=LCD_RS|LCD_EN ; //置位RS.EN
012E 84B3 in R24,0x14
0130 806C ori R24,192
0132 84BB out 0x14,R24
0134 .dbline 131
0134 ; LCD_init() ; //液晶初始化
0134 0E940000 xcall _LCD_init
0138 .dbline 138
0138 ;
0138 ; /*****************************************************************************
0138 ; 初始化串口
0138 ; ******************************************************************************/
0138 ; // UBRR=0x33; ; //波特率9600
0138 ; // UCR=0x18 ; //设置串口接收发送有效
0138 ; UCSRB = 0x00; //disable while setting baud rate
0138 2224 clr R2
013A 2AB8 out 0xa,R2
013C .dbline 139
013C ; UCSRA = 0x00;
013C 2BB8 out 0xb,R2
013E .dbline 140
013E ; UCSRC = BIT(URSEL) | 0x06;
013E 86E8 ldi R24,134
0140 80BD out 0x20,R24
0142 .dbline 141
0142 ; UBRRL = baud; //set baud rate lo
0142 83E3 ldi R24,51
0144 89B9 out 0x9,R24
0146 .dbline 142
0146 ; UBRRH = 0x00; //set baud rate hi
0146 20BC out 0x20,R2
0148 .dbline 143
0148 ; UCSRB = 0x98;
0148 88E9 ldi R24,152
014A 8AB9 out 0xa,R24
014C .dbline 149
014C ;
014C ; /****************************************************************************
014C ; 初始化ad口
014C ; 使用内部基准2.56 v , 使用 pa1(ad1)口采集电压,并发送到串口
014C ; *****************************************************************************/
014C ; BIT_CLR(DDRA,1);
014C D198 cbi 0x1a,1
014E .dbline 150
014E ; BIT_CLR(PORTA,1);//设置采集端口为高祖状态
014E D998 cbi 0x1b,1
0150 .dbline 151
0150 ; SEI();
0150 7894 sei
0152 35C0 xjmp L23
0154 L22:
0154 .dbline 159
0154 ;
0154 ; /******************************************************************************
0154 ; 主循环体,循环测温,电压,并发送到上位机
0154 ; ******************************************************************************/
0154 ;
0154 ; while(1)
0154 ;
0154 ; {
0154 .dbline 160
0154 ; resetDS18B20() ;
0154 0E940000 xcall _resetDS18B20
0158 .dbline 161
0158 ; m=readTempDS18B20() ; //测试终端温度
0158 0E940000 xcall _readTempDS18B20
015C 1801 movw R2,R16
015E 4424 clr R4
0160 5524 clr R5
0162 FE01 movw R30,R28
0164 2082 std z+0,R2
0166 3182 std z+1,R3
0168 4282 std z+2,R4
016A 5382 std z+3,R5
016C .dbline 163
016C ;
016C ; data=m;
016C FE01 movw R30,R28
016E C080 ldd R12,z+0
0170 D180 ldd R13,z+1
0172 .dbline 164
0172 ; vdata = ad_1() ; //测试终端工作电压
0172 BBDF xcall _ad_1
0174 5801 movw R10,R16
0176 .dbline 165
0176 ; puts(data) ;
0176 8601 movw R16,R12
0178 25D0 xcall _puts
017A .dbline 166
017A ; puts(vdata) ; //发送电压和温度到上位机
017A 8501 movw R16,R10
017C 23D0 xcall _puts
017E .dbline 167
017E ; if(start==1) display() ; // 普通模式
017E 80910400 lds R24,_start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -