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

📄 main.ls

📁 STM8全部资料
💻 LS
📖 第 1 页 / 共 3 页
字号:
   1                     ; C Compiler for STM8 (COSMIC Software)
   2                     ; Parser V4.8.32.1 - 30 Mar 2010
   3                     ; Generator V4.3.4 - 23 Mar 2010
2823                     ; 52 void delay_ms(u16 ms)
2823                     ; 53 {
2825                     	switch	.text
2826  0000               _delay_ms:
2828  0000 89            	pushw	x
2829  0001 88            	push	a
2830       00000001      OFST:	set	1
2833  0002 201b          	jra	L1102
2834  0004               L7002:
2835                     ; 57 				for(i=0;i<250;i++)
2837  0004 0f01          	clr	(OFST+0,sp)
2838  0006               L5102:
2841  0006 0c01          	inc	(OFST+0,sp)
2844  0008 7b01          	ld	a,(OFST+0,sp)
2845  000a a1fa          	cp	a,#250
2846  000c 25f8          	jrult	L5102
2847                     ; 59 				for(i=0;i<75;i++)
2849  000e 0f01          	clr	(OFST+0,sp)
2850  0010               L3202:
2853  0010 0c01          	inc	(OFST+0,sp)
2856  0012 7b01          	ld	a,(OFST+0,sp)
2857  0014 a14b          	cp	a,#75
2858  0016 25f8          	jrult	L3202
2859                     ; 61 				ms--;
2861  0018 1e02          	ldw	x,(OFST+1,sp)
2862  001a 1d0001        	subw	x,#1
2863  001d 1f02          	ldw	(OFST+1,sp),x
2864  001f               L1102:
2865                     ; 55 			while(ms!=0)
2867  001f 1e02          	ldw	x,(OFST+1,sp)
2868  0021 26e1          	jrne	L7002
2869                     ; 63 }
2872  0023 5b03          	addw	sp,#3
2873  0025 81            	ret
2916                     ; 65 void delay_us(u16 us)
2916                     ; 66 {
2917                     	switch	.text
2918  0026               _delay_us:
2920  0026 89            	pushw	x
2921  0027 88            	push	a
2922       00000001      OFST:	set	1
2925  0028 201b          	jra	L5502
2926  002a               L3502:
2927                     ; 70 				for(i=0;i<25;i++)
2929  002a 0f01          	clr	(OFST+0,sp)
2930  002c               L1602:
2933  002c 0c01          	inc	(OFST+0,sp)
2936  002e 7b01          	ld	a,(OFST+0,sp)
2937  0030 a119          	cp	a,#25
2938  0032 25f8          	jrult	L1602
2939                     ; 72 				for(i=0;i<7;i++)
2941  0034 0f01          	clr	(OFST+0,sp)
2942  0036               L7602:
2945  0036 0c01          	inc	(OFST+0,sp)
2948  0038 7b01          	ld	a,(OFST+0,sp)
2949  003a a107          	cp	a,#7
2950  003c 25f8          	jrult	L7602
2951                     ; 74 				us--;
2953  003e 1e02          	ldw	x,(OFST+1,sp)
2954  0040 1d0001        	subw	x,#1
2955  0043 1f02          	ldw	(OFST+1,sp),x
2956  0045               L5502:
2957                     ; 68 			while(us!=0)
2959  0045 1e02          	ldw	x,(OFST+1,sp)
2960  0047 26e1          	jrne	L3502
2961                     ; 76 }
2964  0049 5b03          	addw	sp,#3
2965  004b 81            	ret
3016                     ; 18 void _delay_us(u8 us)
3016                     ; 19 {
3017                     	switch	.text
3018  004c               __delay_us:
3020  004c 88            	push	a
3021       00000000      OFST:	set	0
3024  004d               L3212:
3025                     ; 20 	while(--us);
3027  004d 0a01          	dec	(OFST+1,sp)
3028  004f 26fc          	jrne	L3212
3029                     ; 21 }
3032  0051 84            	pop	a
3033  0052 81            	ret
3060                     ; 24 void resetOnewire(void) 
3060                     ; 25 {
3061                     	switch	.text
3062  0053               _resetOnewire:
3066                     ; 26 	OUT_DQ();
3068  0053 7214500c      	bset	_PC_DDR,#2
3069                     ; 27 	CLR_DQ();
3071  0057 7215500a      	bres	_PC_ODR,#2
3072                     ; 28 	_delay_us(750);
3074  005b a6ee          	ld	a,#238
3075  005d aded          	call	__delay_us
3077                     ; 29 	SET_DQ();
3079  005f 7214500a      	bset	_PC_ODR,#2
3080                     ; 30 	_delay_us(100);
3082  0063 a664          	ld	a,#100
3083  0065 ade5          	call	__delay_us
3085                     ; 31 	IN_DQ(); 
3087  0067 7215500c      	bres	_PC_DDR,#2
3089  006b               L1412:
3090                     ; 33 	while(!(GET_DQ()));
3092  006b c6500b        	ld	a,_PC_IDR
3093  006e a504          	bcp	a,#4
3094  0070 27f9          	jreq	L1412
3095                     ; 34 	SET_DQ();
3097  0072 7214500a      	bset	_PC_ODR,#2
3098                     ; 35 }
3101  0076 81            	ret
3148                     ; 38 u8 rOnewire(void)
3148                     ; 39 {
3149                     	switch	.text
3150  0077               _rOnewire:
3152  0077 89            	pushw	x
3153       00000002      OFST:	set	2
3156                     ; 40     u8 data=0,i=0;
3158  0078 0f02          	clr	(OFST+0,sp)
3161                     ; 41     for(i=0;i<8;i++)
3163  007a 0f01          	clr	(OFST-1,sp)
3164  007c               L7612:
3165                     ; 43 		data=data>>1;
3167  007c 0402          	srl	(OFST+0,sp)
3168                     ; 44 		OUT_DQ();
3170  007e 7214500c      	bset	_PC_DDR,#2
3171                     ; 45 		CLR_DQ();
3173  0082 7215500a      	bres	_PC_ODR,#2
3174                     ; 46 		IN_DQ();
3176  0086 7215500c      	bres	_PC_DDR,#2
3177                     ; 47 		if(GET_DQ()) data|=0x80;
3179  008a c6500b        	ld	a,_PC_IDR
3180  008d a504          	bcp	a,#4
3181  008f 2708          	jreq	L3022
3184  0091 7b02          	ld	a,(OFST+0,sp)
3185  0093 aa80          	or	a,#128
3186  0095 6b02          	ld	(OFST+0,sp),a
3188  0097 2007          	jra	L7712
3189  0099               L3022:
3190                     ; 48 		else while(!(GET_DQ()));
3192  0099 c6500b        	ld	a,_PC_IDR
3193  009c a504          	bcp	a,#4
3194  009e 27f9          	jreq	L3022
3195  00a0               L7712:
3196                     ; 49 		_delay_us(60);
3198  00a0 a63c          	ld	a,#60
3199  00a2 ada8          	call	__delay_us
3201                     ; 41     for(i=0;i<8;i++)
3203  00a4 0c01          	inc	(OFST-1,sp)
3206  00a6 7b01          	ld	a,(OFST-1,sp)
3207  00a8 a108          	cp	a,#8
3208  00aa 25d0          	jrult	L7612
3209                     ; 51 	return(data);
3211  00ac 7b02          	ld	a,(OFST+0,sp)
3214  00ae 85            	popw	x
3215  00af 81            	ret
3261                     ; 54 void wOnewire(u8 data)
3261                     ; 55 {
3262                     	switch	.text
3263  00b0               _wOnewire:
3265  00b0 88            	push	a
3266  00b1 88            	push	a
3267       00000001      OFST:	set	1
3270                     ; 56 		u8 i=0;
3272                     ; 57 		OUT_DQ();
3274  00b2 7214500c      	bset	_PC_DDR,#2
3275                     ; 58     for(i=0;i<8;i++)
3277  00b6 0f01          	clr	(OFST+0,sp)
3278  00b8               L1322:
3279                     ; 60 			CLR_DQ();
3281  00b8 7215500a      	bres	_PC_ODR,#2
3282                     ; 61 			if(data&0x01)
3284  00bc 7b02          	ld	a,(OFST+1,sp)
3285  00be a501          	bcp	a,#1
3286  00c0 2706          	jreq	L7322
3287                     ; 63 				SET_DQ();
3289  00c2 7214500a      	bset	_PC_ODR,#2
3291  00c6 2004          	jra	L1422
3292  00c8               L7322:
3293                     ; 67 				CLR_DQ();
3295  00c8 7215500a      	bres	_PC_ODR,#2
3296  00cc               L1422:
3297                     ; 69     	data=data>>1;
3299  00cc 0402          	srl	(OFST+1,sp)
3300                     ; 70 			_delay_us(60);  //65
3302  00ce a63c          	ld	a,#60
3303  00d0 cd004c        	call	__delay_us
3305                     ; 71 			SET_DQ();
3307  00d3 7214500a      	bset	_PC_ODR,#2
3308                     ; 58     for(i=0;i<8;i++)
3310  00d7 0c01          	inc	(OFST+0,sp)
3313  00d9 7b01          	ld	a,(OFST+0,sp)
3314  00db a108          	cp	a,#8
3315  00dd 25d9          	jrult	L1322
3316                     ; 73 }
3319  00df 85            	popw	x
3320  00e0 81            	ret
3362                     ; 17 void convertDs18b20(void) 
3362                     ; 18 { 
3363                     	switch	.text
3364  00e1               _convertDs18b20:
3368                     ; 19     resetOnewire(); 
3370  00e1 cd0053        	call	_resetOnewire
3372                     ; 20     wOnewire(0xcc); 
3374  00e4 a6cc          	ld	a,#204
3375  00e6 adc8          	call	_wOnewire
3377                     ; 21     wOnewire(0x44); 
3379  00e8 a644          	ld	a,#68
3380  00ea adc4          	call	_wOnewire
3382                     ; 22 }
3385  00ec 81            	ret
3432                     ; 24 u8 readTemp(void) 
3432                     ; 25 { 
3433                     	switch	.text
3434  00ed               _readTemp:
3436  00ed 89            	pushw	x
3437       00000002      OFST:	set	2
3440                     ; 27 	convertDs18b20();
3442  00ee adf1          	call	_convertDs18b20
3444                     ; 28 	resetOnewire(); 
3446  00f0 cd0053        	call	_resetOnewire
3448                     ; 29 	wOnewire(0xcc); 
3450  00f3 a6cc          	ld	a,#204
3451  00f5 adb9          	call	_wOnewire
3453                     ; 30 	wOnewire(0xbe); 	
3455  00f7 a6be          	ld	a,#190
3456  00f9 adb5          	call	_wOnewire
3458                     ; 31 	temp1=rOnewire(); 
3460  00fb cd0077        	call	_rOnewire
3462  00fe 6b01          	ld	(OFST-1,sp),a
3463                     ; 32 	temp2=rOnewire(); 
3465  0100 cd0077        	call	_rOnewire
3467  0103 6b02          	ld	(OFST+0,sp),a
3468                     ; 33 	temp2=temp2<<4;
3470  0105 7b02          	ld	a,(OFST+0,sp)
3471  0107 4e            	swap	a
3472  0108 a4f0          	and	a,#240
3473  010a 6b02          	ld	(OFST+0,sp),a
3474                     ; 34 	temp1=temp1>>4;
3476  010c 7b01          	ld	a,(OFST-1,sp)
3477  010e 4e            	swap	a
3478  010f a40f          	and	a,#15
3479  0111 6b01          	ld	(OFST-1,sp),a
3480                     ; 35 	temp2|=temp1;
3482  0113 7b02          	ld	a,(OFST+0,sp)
3483  0115 1a01          	or	a,(OFST-1,sp)
3484  0117 6b02          	ld	(OFST+0,sp),a
3485                     ; 37 	return (temp2&0x7F);
3487  0119 7b02          	ld	a,(OFST+0,sp)
3488  011b a47f          	and	a,#127
3491  011d 85            	popw	x
3492  011e 81            	ret
3534                     ; 17 void SPI_Init(void)
3534                     ; 18 {
3535                     	switch	.text
3536  011f               _SPI_Init:
3540                     ; 19 	SPI_CR1|=0x38;   //波特率
3542  011f c65200        	ld	a,_SPI_CR1
3543  0122 aa38          	or	a,#56
3544  0124 c75200        	ld	_SPI_CR1,a
3545                     ; 24 	SPI_CR2|=0x03;   //配置NSS脚为1
3547  0127 c65201        	ld	a,_SPI_CR2
3548  012a aa03          	or	a,#3
3549  012c c75201        	ld	_SPI_CR2,a
3550                     ; 25 	SPI_CR1|=0x04;   //配置为主设备
3552  012f 72145200      	bset	_SPI_CR1,#2
3553                     ; 26 	SPI_CR1|=0x40;   //开启SPI
3555  0133 721c5200      	bset	_SPI_CR1,#6
3556                     ; 27 }
3559  0137 81            	ret
3595                     ; 29 void SPI_sendchar(u8 data)
3595                     ; 30 {	
3596                     	switch	.text
3597  0138               _SPI_sendchar:
3601                     ; 31 	SPI_DR=data;
3603  0138 c75204        	ld	_SPI_DR,a
3605  013b               L3432:
3606                     ; 32 	while(!(SPI_SR & 0x02));
3608  013b c65203        	ld	a,_SPI_SR
3609  013e a502          	bcp	a,#2
3610  0140 27f9          	jreq	L3432
3611                     ; 33 }
3614  0142 81            	ret
3650                     ; 35 u8 SPI_rechar(void)
3650                     ; 36 {	
3651                     	switch	.text
3652  0143               _SPI_rechar:
3654  0143 88            	push	a
3655       00000001      OFST:	set	1
3658                     ; 38 	data=SPI_DR;
3660  0144 c65204        	ld	a,_SPI_DR
3661  0147 6b01          	ld	(OFST+0,sp),a
3663  0149               L1732:
3664                     ; 39 	while(!(SPI_SR & 0x01));
3666  0149 c65203        	ld	a,_SPI_SR
3667  014c a501          	bcp	a,#1
3668  014e 27f9          	jreq	L1732
3669                     ; 40 	return data;
3671  0150 7b01          	ld	a,(OFST+0,sp)
3674  0152 5b01          	addw	sp,#1
3675  0154 81            	ret
3734                     ; 21 void st7920LcdInit(void)
3734                     ; 22 {
3735                     	switch	.text
3736  0155               _st7920LcdInit:
3738  0155 88            	push	a
3739       00000001      OFST:	set	1
3742                     ; 24 	SPI_Init();
3744  0156 adc7          	call	_SPI_Init
3746                     ; 25 	delay_ms(100);
3748  0158 ae0064        	ldw	x,#100
3749  015b cd0000        	call	_delay_ms
3751                     ; 26 	PE_DDR|=0x20;
3753  015e 721a5016      	bset	_PE_DDR,#5
3754                     ; 27 	PE_CR1|=0x20;
3756  0162 721a5017      	bset	_PE_CR1,#5
3757                     ; 28 	PE_CR2|=0x20;
3759  0166 721a5018      	bset	_PE_CR2,#5
3760                     ; 29 	sendCodeST7920(0x0c);//整体显示
3762  016a a60c          	ld	a,#12
3763  016c ad1c          	call	_sendCodeST7920
3765                     ; 30 	sendCodeST7920(0x01);//清屏
3767  016e a601          	ld	a,#1
3768  0170 ad18          	call	_sendCodeST7920
3770                     ; 31 	sendCodeST7920(0x02);
3772  0172 a602          	ld	a,#2
3773  0174 ad14          	call	_sendCodeST7920
3775                     ; 32 	for(i=0;i<64;i++)
3777  0176 0f01          	clr	(OFST+0,sp)
3778  0178               L1242:
3779                     ; 33 		lcd_buffer[i]=' ';
3781  0178 7b01          	ld	a,(OFST+0,sp)
3782  017a 5f            	clrw	x
3783  017b 97            	ld	xl,a
3784  017c a620          	ld	a,#32
3785  017e e700          	ld	(_lcd_buffer,x),a
3786                     ; 32 	for(i=0;i<64;i++)
3788  0180 0c01          	inc	(OFST+0,sp)
3791  0182 7b01          	ld	a,(OFST+0,sp)
3792  0184 a140          	cp	a,#64
3793  0186 25f0          	jrult	L1242
3794                     ; 35 }
3797  0188 84            	pop	a
3798  0189 81            	ret
3835                     ; 37 void sendCodeST7920(u8 Lcd_cmd)
3835                     ; 38 {
3836                     	switch	.text
3837  018a               _sendCodeST7920:
3839  018a 88            	push	a
3840       00000000      OFST:	set	0
3843                     ; 39 	E_CLK
3845  018b 721b5014      	bres	_PE_ODR,#5
3846                     ; 40 	LCD_DELAY()
3849  018f 9d            nop
3854  0190 9d            nop
3859  0191 9d            nop
3864  0192 9d            nop
3869  0193 9d            nop
3871                     ; 41 	E_SET
3873  0194 721a5014      	bset	_PE_ODR,#5
3874                     ; 42 	SPI_sendchar(0xF8);
3876  0198 a6f8          	ld	a,#248
3877  019a ad9c          	call	_SPI_sendchar
3879                     ; 43 	SPI_sendchar(Lcd_cmd & 0xF0);
3881  019c 7b01          	ld	a,(OFST+1,sp)
3882  019e a4f0          	and	a,#240
3883  01a0 ad96          	call	_SPI_sendchar
3885                     ; 44 	SPI_sendchar(Lcd_cmd << 4);
3887  01a2 7b01          	ld	a,(OFST+1,sp)
3888  01a4 97            	ld	xl,a
3889  01a5 a610          	ld	a,#16

⌨️ 快捷键说明

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