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

📄 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
3026                     ; 19 void hc164SetDat(u8 dat)
3026                     ; 20 {
3027                     	switch	.text
3028  004c               _hc164SetDat:
3030  004c 88            	push	a
3031  004d 88            	push	a
3032       00000001      OFST:	set	1
3035                     ; 22 	for(i=0;i<8;i++)
3037  004e 0f01          	clr	(OFST+0,sp)
3038  0050               L5212:
3039                     ; 24 		HC164_CLR_CLK;
3041  0050 7219500a      	bres	_PC_ODR,#4
3042                     ; 25 		if(dat&0x80)
3044  0054 7b02          	ld	a,(OFST+1,sp)
3045  0056 a580          	bcp	a,#128
3046  0058 270a          	jreq	L3312
3047                     ; 27 			HC164_SET_DATA;
3049  005a 7216500a      	bset	_PC_ODR,#3
3050                     ; 28 			HC164_SET_CLK;
3052  005e 7218500a      	bset	_PC_ODR,#4
3054  0062 2008          	jra	L5312
3055  0064               L3312:
3056                     ; 32 			HC164_CLR_DATA;
3058  0064 7217500a      	bres	_PC_ODR,#3
3059                     ; 33 			HC164_SET_CLK;
3061  0068 7218500a      	bset	_PC_ODR,#4
3062  006c               L5312:
3063                     ; 35 		dat = dat<<1;
3065  006c 0802          	sll	(OFST+1,sp)
3066                     ; 22 	for(i=0;i<8;i++)
3068  006e 0c01          	inc	(OFST+0,sp)
3071  0070 7b01          	ld	a,(OFST+0,sp)
3072  0072 a108          	cp	a,#8
3073  0074 25da          	jrult	L5212
3074                     ; 37 }
3077  0076 85            	popw	x
3078  0077 81            	ret
3104                     ; 39 void hc164Init(void)
3104                     ; 40 {
3105                     	switch	.text
3106  0078               _hc164Init:
3110                     ; 41 	HC164_OUT_DATA;
3112  0078 7216500c      	bset	_PC_DDR,#3
3115  007c 7216500d      	bset	_PC_CR1,#3
3118  0080 7216500e      	bset	_PC_CR2,#3
3119                     ; 42 	HC164_OUT_CLK;
3122  0084 7218500c      	bset	_PC_DDR,#4
3125  0088 7218500d      	bset	_PC_CR1,#4
3128  008c 7218500e      	bset	_PC_CR2,#4
3129                     ; 43 }
3133  0090 81            	ret
3196                     ; 20 u8 hc165GetDat(void)
3196                     ; 21 {
3197                     	switch	.text
3198  0091               _hc165GetDat:
3200  0091 89            	pushw	x
3201       00000002      OFST:	set	2
3204                     ; 22 	u8 i,dat=0;
3206  0092 0f02          	clr	(OFST+0,sp)
3207                     ; 23 	HC165_CLR_PL;
3209  0094 72155014      	bres	_PE_ODR,#2
3210                     ; 24 	HC165_SET_PL;
3212  0098 72145014      	bset	_PE_ODR,#2
3213                     ; 25 	for(i=0;i<8;i++)
3215  009c 0f01          	clr	(OFST-1,sp)
3216  009e               L7712:
3217                     ; 27 		HC165_CLR_TXD;
3219  009e 721b500f      	bres	_PD_ODR,#5
3220                     ; 28 		dat=dat<<1;
3222  00a2 0802          	sll	(OFST+0,sp)
3223                     ; 29 		if(HC165_GET_RXD)
3225  00a4 c65010        	ld	a,_PD_IDR
3226  00a7 a540          	bcp	a,#64
3227  00a9 2706          	jreq	L5022
3228                     ; 31 			dat|=0x01;
3230  00ab 7b02          	ld	a,(OFST+0,sp)
3231  00ad aa01          	or	a,#1
3232  00af 6b02          	ld	(OFST+0,sp),a
3233  00b1               L5022:
3234                     ; 33 		HC165_SET_TXD;
3236  00b1 721a500f      	bset	_PD_ODR,#5
3237                     ; 25 	for(i=0;i<8;i++)
3239  00b5 0c01          	inc	(OFST-1,sp)
3242  00b7 7b01          	ld	a,(OFST-1,sp)
3243  00b9 a108          	cp	a,#8
3244  00bb 25e1          	jrult	L7712
3245                     ; 35 	return dat;
3247  00bd 7b02          	ld	a,(OFST+0,sp)
3250  00bf 85            	popw	x
3251  00c0 81            	ret
3281                     ; 38 void hc165Init(void)
3281                     ; 39 {
3282                     	switch	.text
3283  00c1               _hc165Init:
3287                     ; 40 	HC165_OUT_PL;
3289  00c1 72145016      	bset	_PE_DDR,#2
3292  00c5 72145017      	bset	_PE_CR1,#2
3295  00c9 72145018      	bset	_PE_CR2,#2
3296                     ; 41 	HC165_OUT_TXD;
3299  00cd 721a5011      	bset	_PD_DDR,#5
3302  00d1 721a5012      	bset	_PD_CR1,#5
3305  00d5 721a5013      	bset	_PD_CR2,#5
3306                     ; 42 	HC165_IN_RXD;
3309  00d9 721d500f      	bres	_PD_ODR,#6
3312  00dd 721d5012      	bres	_PD_CR1,#6
3315  00e1 721d5013      	bres	_PD_CR2,#6
3316                     ; 43 }
3320  00e5 81            	ret
3362                     ; 17 void SPI_Init(void)
3362                     ; 18 {
3363                     	switch	.text
3364  00e6               _SPI_Init:
3368                     ; 19 	SPI_CR1|=0x38;   //波特率
3370  00e6 c65200        	ld	a,_SPI_CR1
3371  00e9 aa38          	or	a,#56
3372  00eb c75200        	ld	_SPI_CR1,a
3373                     ; 24 	SPI_CR2|=0x03;   //配置NSS脚为1
3375  00ee c65201        	ld	a,_SPI_CR2
3376  00f1 aa03          	or	a,#3
3377  00f3 c75201        	ld	_SPI_CR2,a
3378                     ; 25 	SPI_CR1|=0x04;   //配置为主设备
3380  00f6 72145200      	bset	_SPI_CR1,#2
3381                     ; 26 	SPI_CR1|=0x40;   //开启SPI
3383  00fa 721c5200      	bset	_SPI_CR1,#6
3384                     ; 27 }
3387  00fe 81            	ret
3423                     ; 29 void SPI_sendchar(u8 data)
3423                     ; 30 {	
3424                     	switch	.text
3425  00ff               _SPI_sendchar:
3429                     ; 31 	SPI_DR=data;
3431  00ff c75204        	ld	_SPI_DR,a
3433  0102               L7522:
3434                     ; 32 	while(!(SPI_SR & 0x02));
3436  0102 c65203        	ld	a,_SPI_SR
3437  0105 a502          	bcp	a,#2
3438  0107 27f9          	jreq	L7522
3439                     ; 33 }
3442  0109 81            	ret
3478                     ; 35 u8 SPI_rechar(void)
3478                     ; 36 {	
3479                     	switch	.text
3480  010a               _SPI_rechar:
3482  010a 88            	push	a
3483       00000001      OFST:	set	1
3486                     ; 38 	data=SPI_DR;
3488  010b c65204        	ld	a,_SPI_DR
3489  010e 6b01          	ld	(OFST+0,sp),a
3491  0110               L5032:
3492                     ; 39 	while(!(SPI_SR & 0x01));
3494  0110 c65203        	ld	a,_SPI_SR
3495  0113 a501          	bcp	a,#1
3496  0115 27f9          	jreq	L5032
3497                     ; 40 	return data;
3499  0117 7b01          	ld	a,(OFST+0,sp)
3502  0119 5b01          	addw	sp,#1
3503  011b 81            	ret
3562                     ; 21 void st7920LcdInit(void)
3562                     ; 22 {
3563                     	switch	.text
3564  011c               _st7920LcdInit:
3566  011c 88            	push	a
3567       00000001      OFST:	set	1
3570                     ; 24 	SPI_Init();
3572  011d adc7          	call	_SPI_Init
3574                     ; 25 	delay_ms(100);
3576  011f ae0064        	ldw	x,#100
3577  0122 cd0000        	call	_delay_ms
3579                     ; 26 	PE_DDR|=0x20;
3581  0125 721a5016      	bset	_PE_DDR,#5
3582                     ; 27 	PE_CR1|=0x20;
3584  0129 721a5017      	bset	_PE_CR1,#5
3585                     ; 28 	PE_CR2|=0x20;
3587  012d 721a5018      	bset	_PE_CR2,#5
3588                     ; 29 	sendCodeST7920(0x0c);//整体显示
3590  0131 a60c          	ld	a,#12
3591  0133 ad1c          	call	_sendCodeST7920
3593                     ; 30 	sendCodeST7920(0x01);//清屏
3595  0135 a601          	ld	a,#1
3596  0137 ad18          	call	_sendCodeST7920
3598                     ; 31 	sendCodeST7920(0x02);
3600  0139 a602          	ld	a,#2
3601  013b ad14          	call	_sendCodeST7920
3603                     ; 32 	for(i=0;i<64;i++)
3605  013d 0f01          	clr	(OFST+0,sp)
3606  013f               L5332:
3607                     ; 33 		lcd_buffer[i]=' ';
3609  013f 7b01          	ld	a,(OFST+0,sp)
3610  0141 5f            	clrw	x
3611  0142 97            	ld	xl,a
3612  0143 a620          	ld	a,#32
3613  0145 e700          	ld	(_lcd_buffer,x),a
3614                     ; 32 	for(i=0;i<64;i++)
3616  0147 0c01          	inc	(OFST+0,sp)
3619  0149 7b01          	ld	a,(OFST+0,sp)
3620  014b a140          	cp	a,#64
3621  014d 25f0          	jrult	L5332
3622                     ; 35 }
3625  014f 84            	pop	a
3626  0150 81            	ret
3663                     ; 37 void sendCodeST7920(u8 Lcd_cmd)
3663                     ; 38 {
3664                     	switch	.text
3665  0151               _sendCodeST7920:
3667  0151 88            	push	a
3668       00000000      OFST:	set	0
3671                     ; 39 	E_CLK
3673  0152 721b5014      	bres	_PE_ODR,#5
3674                     ; 40 	LCD_DELAY()
3677  0156 9d            nop
3682  0157 9d            nop
3687  0158 9d            nop
3692  0159 9d            nop
3697  015a 9d            nop
3699                     ; 41 	E_SET
3701  015b 721a5014      	bset	_PE_ODR,#5
3702                     ; 42 	SPI_sendchar(0xF8);
3704  015f a6f8          	ld	a,#248
3705  0161 ad9c          	call	_SPI_sendchar
3707                     ; 43 	SPI_sendchar(Lcd_cmd & 0xF0);
3709  0163 7b01          	ld	a,(OFST+1,sp)
3710  0165 a4f0          	and	a,#240
3711  0167 ad96          	call	_SPI_sendchar
3713                     ; 44 	SPI_sendchar(Lcd_cmd << 4);
3715  0169 7b01          	ld	a,(OFST+1,sp)
3716  016b 97            	ld	xl,a
3717  016c a610          	ld	a,#16
3718  016e 42            	mul	x,a
3719  016f 9f            	ld	a,xl
3720  0170 ad8d          	call	_SPI_sendchar
3722                     ; 45 	LCD_DELAY()
3725  0172 9d            nop
3730  0173 9d            nop
3735  0174 9d            nop
3740  0175 9d            nop
3745  0176 9d            nop
3747                     ; 46 	E_CLK
3749  0177 721b5014      	bres	_PE_ODR,#5
3750                     ; 47 	LCD_DELAY()
3753  017b 9d            nop
3758  017c 9d            nop
3763  017d 9d            nop
3768  017e 9d            nop
3773  017f 9d            nop
3775                     ; 48 }
3778  0180 84            	pop	a
3779  0181 81            	ret
3816                     ; 50 void sendDataST7920(u8 Lcd_data)
3816                     ; 51 {
3817                     	switch	.text
3818  0182               _sendDataST7920:
3820  0182 88            	push	a
3821       00000000      OFST:	set	0
3824                     ; 52 	E_CLK
3826  0183 721b5014      	bres	_PE_ODR,#5
3827                     ; 53 	LCD_DELAY()
3830  0187 9d            nop
3835  0188 9d            nop
3840  0189 9d            nop
3845  018a 9d            nop
3850  018b 9d            nop
3852                     ; 54 	E_SET
3854  018c 721a5014      	bset	_PE_ODR,#5
3855                     ; 55 	SPI_sendchar(0xFA);
3857  0190 a6fa          	ld	a,#250
3858  0192 cd00ff        	call	_SPI_sendchar
3860                     ; 56 	SPI_sendchar(Lcd_data & 0xF0);
3862  0195 7b01          	ld	a,(OFST+1,sp)
3863  0197 a4f0          	and	a,#240
3864  0199 cd00ff        	call	_SPI_sendchar
3866                     ; 57 	SPI_sendchar(Lcd_data << 4);
3868  019c 7b01          	ld	a,(OFST+1,sp)
3869  019e 97            	ld	xl,a
3870  019f a610          	ld	a,#16
3871  01a1 42            	mul	x,a
3872  01a2 9f            	ld	a,xl
3873  01a3 cd00ff        	call	_SPI_sendchar
3875                     ; 58 	LCD_DELAY()
3878  01a6 9d            nop
3883  01a7 9d            nop
3888  01a8 9d            nop
3893  01a9 9d            nop
3898  01aa 9d            nop
3900                     ; 59 	E_CLK

⌨️ 快捷键说明

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