⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.ls

📁 STM8S105S4程序
💻 LS
📖 第 1 页 / 共 2 页
字号:
3533  011c 88            	push	a
3534  011d 88            	push	a
3535       00000001      OFST:	set	1
3538                     ; 145 		PG_DDR=0x02;
3540  011e 35025020      	mov	_PG_DDR,#2
3541                     ; 146     PG_CR1=0x02;   //设置IO口为推挽输出
3543  0122 35025021      	mov	_PG_CR1,#2
3544                     ; 147     PG_CR2=0x00;
3546  0126 725f5022      	clr	_PG_CR2
3547                     ; 149 		delay_1ms(2);
3549  012a ae0002        	ldw	x,#2
3550  012d ada2          	call	_delay_1ms
3552                     ; 150     for(i=0;i<8;i++)  //请参考18B20时序图
3554  012f 0f01          	clr	(OFST+0,sp)
3555  0131               L1322:
3556                     ; 152 			 DQ=0;
3558  0131 7213501e      	bres	_DQ
3559                     ; 153        delay(1);
3561  0135 a601          	ld	a,#1
3562  0137 ad8e          	call	_delay
3564                     ; 154        DQ=date&0x01;
3566  0139 7b02          	ld	a,(OFST+1,sp)
3567  013b a501          	bcp	a,#1
3568  013d 2602          	jrne	L43
3569  013f 2006          	jp	L03
3570  0141               L43:
3571  0141 7212501e      	bset	_DQ
3572  0145 2004          	jra	L23
3573  0147               L03:
3574  0147 7213501e      	bres	_DQ
3575  014b               L23:
3576                     ; 155        delay(10);
3578  014b a60a          	ld	a,#10
3579  014d cd00c7        	call	_delay
3581                     ; 156        DQ=1;
3583  0150 7212501e      	bset	_DQ
3584                     ; 157        date>>=1;
3586  0154 0402          	srl	(OFST+1,sp)
3587                     ; 150     for(i=0;i<8;i++)  //请参考18B20时序图
3589  0156 0c01          	inc	(OFST+0,sp)
3592  0158 7b01          	ld	a,(OFST+0,sp)
3593  015a a108          	cp	a,#8
3594  015c 25d3          	jrult	L1322
3595                     ; 159     delay(4);
3597  015e a604          	ld	a,#4
3598  0160 cd00c7        	call	_delay
3600                     ; 160 }
3603  0163 85            	popw	x
3604  0164 81            	ret
3654                     ; 162 uchar read_byte(void)
3654                     ; 163 {
3655                     	switch	.text
3656  0165               _read_byte:
3658  0165 89            	pushw	x
3659       00000002      OFST:	set	2
3662                     ; 165 		delay_1ms(2);
3664  0166 ae0002        	ldw	x,#2
3665  0169 cd00d1        	call	_delay_1ms
3667                     ; 166     for(i=0;i<8;i++)
3669  016c 0f01          	clr	(OFST-1,sp)
3670  016e               L1622:
3671                     ; 168 			  PG_DDR=0x02;
3673  016e 35025020      	mov	_PG_DDR,#2
3674                     ; 169         PG_CR1=0x02;    //设置IO口为推挽输出
3676  0172 35025021      	mov	_PG_CR1,#2
3677                     ; 170         PG_CR2=0x00; 
3679  0176 725f5022      	clr	_PG_CR2
3680                     ; 172         DQ=0;
3682  017a 7213501e      	bres	_DQ
3683                     ; 173         value>>=1;     //先读地位,因此没读一次数向左移动 一位
3685  017e 0402          	srl	(OFST+0,sp)
3686                     ; 174         DQ=1; 
3688  0180 7212501e      	bset	_DQ
3689                     ; 176 		    PG_DDR=0x00;
3691  0184 725f5020      	clr	_PG_DDR
3692                     ; 177         PG_CR1=0x02;   //读数据时设置IO口为上拉输入
3694  0188 35025021      	mov	_PG_CR1,#2
3695                     ; 178         PG_CR2=0x00;
3697  018c 725f5022      	clr	_PG_CR2
3698                     ; 180         if((PG_IDR&0x02)==0x02)  //如果IO口电压为高,则value中对应的位为1,否则为0
3700  0190 c6501f        	ld	a,_PG_IDR
3701  0193 a402          	and	a,#2
3702  0195 a102          	cp	a,#2
3703  0197 2606          	jrne	L7622
3704                     ; 181         value|=0x80;
3706  0199 7b02          	ld	a,(OFST+0,sp)
3707  019b aa80          	or	a,#128
3708  019d 6b02          	ld	(OFST+0,sp),a
3709  019f               L7622:
3710                     ; 182         delay(4);
3712  019f a604          	ld	a,#4
3713  01a1 cd00c7        	call	_delay
3715                     ; 166     for(i=0;i<8;i++)
3717  01a4 0c01          	inc	(OFST-1,sp)
3720  01a6 7b01          	ld	a,(OFST-1,sp)
3721  01a8 a108          	cp	a,#8
3722  01aa 25c2          	jrult	L1622
3723                     ; 184     return value;            //将读的数返回
3725  01ac 7b02          	ld	a,(OFST+0,sp)
3728  01ae 85            	popw	x
3729  01af 81            	ret
3788                     ; 187 void readtemperature(void)
3788                     ; 188 {
3789                     	switch	.text
3790  01b0               _readtemperature:
3792  01b0 5204          	subw	sp,#4
3793       00000004      OFST:	set	4
3796                     ; 190 		init_Ds18B20();     //初始化18B20
3798  01b2 cd00f1        	call	_init_Ds18B20
3800                     ; 191     write_byte(0xcc);   //逃过ROM,一个IO口有多个 18B20时需 要读ROM
3802  01b5 a6cc          	ld	a,#204
3803  01b7 cd011c        	call	_write_byte
3805                     ; 192     write_byte(0x44);   //启动温度检测
3807  01ba a644          	ld	a,#68
3808  01bc cd011c        	call	_write_byte
3810                     ; 193     DQ=1;
3812  01bf 7212501e      	bset	_DQ
3813                     ; 194     delay(200);         //延时,等待温度检测完成
3815  01c3 a6c8          	ld	a,#200
3816  01c5 cd00c7        	call	_delay
3818                     ; 195 		init_Ds18B20();     //每次操作前要初始化18B20
3820  01c8 cd00f1        	call	_init_Ds18B20
3822                     ; 196 		write_byte(0xcc);   //跳过ROM
3824  01cb a6cc          	ld	a,#204
3825  01cd cd011c        	call	_write_byte
3827                     ; 197     write_byte(0xbe);   //从储存器读数据
3829  01d0 a6be          	ld	a,#190
3830  01d2 cd011c        	call	_write_byte
3832                     ; 198     a=read_byte();      //读地位温度数据
3834  01d5 ad8e          	call	_read_byte
3836  01d7 6b02          	ld	(OFST-2,sp),a
3837                     ; 199     b=read_byte();      //读高位温度数据
3839  01d9 ad8a          	call	_read_byte
3841  01db 6b04          	ld	(OFST+0,sp),a
3842                     ; 200 		if(b>0x07)          //如果温度为负数,b会大于0x07,故当b大于0x07时,让1602在温度前面显示“-”
3844  01dd 7b04          	ld	a,(OFST+0,sp)
3845  01df a108          	cp	a,#8
3846  01e1 2504          	jrult	L7132
3847                     ; 201 		  q=1;
3849  01e3 35010009      	mov	_q,#1
3850  01e7               L7132:
3851                     ; 202     p=(a&0x0f)*625/100;  //小数部分数据处理,由于小数部分有 四位,故分辨率为1/16,16×625刚好为10000,这里再除于100是精确到小数点后两位
3853  01e7 7b02          	ld	a,(OFST-2,sp)
3854  01e9 a40f          	and	a,#15
3855  01eb 5f            	clrw	x
3856  01ec 97            	ld	xl,a
3857  01ed 90ae0271      	ldw	y,#625
3858  01f1 cd0000        	call	c_imul
3860  01f4 a664          	ld	a,#100
3861  01f6 cd0000        	call	c_sdivx
3863  01f9 01            	rrwa	x,a
3864  01fa 6b03          	ld	(OFST-1,sp),a
3865  01fc 02            	rlwa	x,a
3866                     ; 204     b=(b<<4)+(a>>4);     //将低位温度数据的高四位和高位温度 数据的 低四位拼成温度数据的整数部分
3868  01fd 7b02          	ld	a,(OFST-2,sp)
3869  01ff 4e            	swap	a
3870  0200 a40f          	and	a,#15
3871  0202 6b01          	ld	(OFST-3,sp),a
3872  0204 7b04          	ld	a,(OFST+0,sp)
3873  0206 97            	ld	xl,a
3874  0207 a610          	ld	a,#16
3875  0209 42            	mul	x,a
3876  020a 9f            	ld	a,xl
3877  020b 1b01          	add	a,(OFST-3,sp)
3878  020d 6b04          	ld	(OFST+0,sp),a
3879                     ; 206     table2[7]=0x43;      //摄氏度中“C” 的代码
3881  020f 35430008      	mov	_table2+7,#67
3882                     ; 207     table2[6]=0xdf;      //摄氏度中“。“ 的代码
3884  0213 35df0007      	mov	_table2+6,#223
3885                     ; 208     table2[5]=p%10+0x30;  //小数点后第二位数据,加上30是为了和1602中字符代码一致
3887  0217 7b03          	ld	a,(OFST-1,sp)
3888  0219 5f            	clrw	x
3889  021a 97            	ld	xl,a
3890  021b a60a          	ld	a,#10
3891  021d cd0000        	call	c_smodx
3893  0220 1c0030        	addw	x,#48
3894  0223 01            	rrwa	x,a
3895  0224 b706          	ld	_table2+5,a
3896  0226 02            	rlwa	x,a
3897                     ; 209     table2[4]=p/10+0x30;
3899  0227 7b03          	ld	a,(OFST-1,sp)
3900  0229 5f            	clrw	x
3901  022a 97            	ld	xl,a
3902  022b a60a          	ld	a,#10
3903  022d cd0000        	call	c_sdivx
3905  0230 1c0030        	addw	x,#48
3906  0233 01            	rrwa	x,a
3907  0234 b705          	ld	_table2+4,a
3908  0236 02            	rlwa	x,a
3909                     ; 210     table2[3]=0x2e;       //小数点代码
3911  0237 352e0004      	mov	_table2+3,#46
3912                     ; 211     table2[2]=b%10+0x30;  
3914  023b 7b04          	ld	a,(OFST+0,sp)
3915  023d 5f            	clrw	x
3916  023e 97            	ld	xl,a
3917  023f a60a          	ld	a,#10
3918  0241 cd0000        	call	c_smodx
3920  0244 1c0030        	addw	x,#48
3921  0247 01            	rrwa	x,a
3922  0248 b703          	ld	_table2+2,a
3923  024a 02            	rlwa	x,a
3924                     ; 212     table2[1]=b/10+0x30;   //整数部分
3926  024b 7b04          	ld	a,(OFST+0,sp)
3927  024d 5f            	clrw	x
3928  024e 97            	ld	xl,a
3929  024f a60a          	ld	a,#10
3930  0251 cd0000        	call	c_sdivx
3932  0254 1c0030        	addw	x,#48
3933  0257 01            	rrwa	x,a
3934  0258 b702          	ld	_table2+1,a
3935  025a 02            	rlwa	x,a
3936                     ; 213 		table2[0]=0x80;        //空字符代码,就是不显示任何字符
3938  025b 35800001      	mov	_table2,#128
3939                     ; 214     if(q==1)               
3941  025f b609          	ld	a,_q
3942  0261 a101          	cp	a,#1
3943  0263 2604          	jrne	L1232
3944                     ; 215     table2[0]=0x2d;        //”-“代码,若温度为-,则显示  
3946  0265 352d0001      	mov	_table2,#45
3947  0269               L1232:
3948                     ; 216 }
3951  0269 5b04          	addw	sp,#4
3952  026b 81            	ret
4074                     	xdef	_main
4075                     	xdef	_display
4076                     	xdef	_init
4077                     	xdef	_write_data
4078                     	xdef	_write_com
4079                     	xdef	_init_stm8
4080                     	switch	.ubsct
4081  0000               _i:
4082  0000 00            	ds.b	1
4083                     	xdef	_i
4084  0001               _table2:
4085  0001 000000000000  	ds.b	8
4086                     	xdef	_table2
4087                     	xdef	_table1
4088                     	xdef	_table0
4089                     	xdef	_readtemperature
4090                     	xdef	_read_byte
4091                     	xdef	_write_byte
4092                     	xdef	_delay_1ms
4093                     	xdef	_delay
4094                     	xdef	_init_Ds18B20
4095                     	xdef	_a
4096  0009               _q:
4097  0009 00            	ds.b	1
4098                     	xdef	_q
4099  000a               _temp:
4100  000a 00            	ds.b	1
4101                     	xdef	_temp
4102                     	xref.b	c_x
4122                     	xref	c_smodx
4123                     	xref	c_sdivx
4124                     	xref	c_imul
4125                     	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -