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

📄 main.ls

📁 STM8全部资料
💻 LS
📖 第 1 页 / 共 4 页
字号:
   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
3011                     ; 18 void I2C_Init(void)
3011                     ; 19 {
3012                     	switch	.text
3013  004c               _I2C_Init:
3017                     ; 20 		I2C_FREQR=0x0f;    //设置频率寄存器
3019  004c 350f5212      	mov	_I2C_FREQR,#15
3020                     ; 21 		I2C_CCRH=0x00;     //设置始终寄存器高位
3022  0050 725f521c      	clr	_I2C_CCRH
3023                     ; 22 		I2C_CCRL=0x50;     //设置始终寄存器低位
3025  0054 3550521b      	mov	_I2C_CCRL,#80
3026                     ; 23 		I2C_TRISER=0x11;   //设置最大SCL上升时间
3028  0058 3511521d      	mov	_I2C_TRISER,#17
3029                     ; 24 		I2C_CR1|=0x01;     //使能I2C模块
3031  005c 72105210      	bset	_I2C_CR1,#0
3032                     ; 25 		I2C_Ack();         //设置匹配应答
3034  0060 72145211      	bset	_I2C_CR2,#2
3035                     ; 26 		I2C_CR2|=0x08;     //设置接收应答
3038  0064 72165211      	bset	_I2C_CR2,#3
3039                     ; 27 }
3042  0068 81            	ret
3068                     ; 30 void I2C_Start(void)
3068                     ; 31 {
3069                     	switch	.text
3070  0069               _I2C_Start:
3074  0069               L5212:
3075                     ; 32 	I2C_busy();
3077  0069 c65219        	ld	a,_I2C_SR3
3078  006c a402          	and	a,#2
3079  006e a101          	cp	a,#1
3080  0070 27f7          	jreq	L5212
3081                     ; 33 	I2C_start();
3084  0072 72105211      	bset	_I2C_CR2,#0
3087  0076               L3312:
3088                     ; 34 	while(I2C_SBask==0);
3090  0076 c65217        	ld	a,_I2C_SR1
3091  0079 a501          	bcp	a,#1
3092  007b 27f9          	jreq	L3312
3093                     ; 35 }
3096  007d 81            	ret
3133                     ; 37 void I2C_SendDAdr(u8 Add)
3133                     ; 38 {
3134                     	switch	.text
3135  007e               _I2C_SendDAdr:
3139                     ; 39 	I2C_writebyte(Add);	
3141  007e c75216        	ld	_I2C_DR,a
3144  0081               L7512:
3145                     ; 40 	while(I2C_addrask==0);
3147  0081 c65217        	ld	a,_I2C_SR1
3148  0084 a502          	bcp	a,#2
3149  0086 27f9          	jreq	L7512
3151  0088               L5612:
3152                     ; 41 	I2C_busy();
3154  0088 c65219        	ld	a,_I2C_SR3
3155  008b a402          	and	a,#2
3156  008d a101          	cp	a,#1
3157  008f 27f7          	jreq	L5612
3158                     ; 42 }
3162  0091 81            	ret
3199                     ; 45 void I2C_SendDat(u8 data)
3199                     ; 46 {
3200                     	switch	.text
3201  0092               _I2C_SendDat:
3205                     ; 47 	I2C_writebyte(data);
3207  0092 c75216        	ld	_I2C_DR,a
3210  0095               L1122:
3211                     ; 48 	I2C_busy();
3213  0095 c65219        	ld	a,_I2C_SR3
3214  0098 a402          	and	a,#2
3215  009a a101          	cp	a,#1
3216  009c 27f7          	jreq	L1122
3219  009e               L7122:
3220                     ; 49 	while(I2C_TxEask==0);
3222  009e c65217        	ld	a,_I2C_SR1
3223  00a1 a580          	bcp	a,#128
3224  00a3 27f9          	jreq	L7122
3225                     ; 50 }
3228  00a5 81            	ret
3264                     ; 52 u8 I2C_RcvDat(void)
3264                     ; 53 {
3265                     	switch	.text
3266  00a6               _I2C_RcvDat:
3268  00a6 88            	push	a
3269       00000001      OFST:	set	1
3272  00a7               L5422:
3273                     ; 55 	while(I2C_RxNeask==0);
3275  00a7 c65217        	ld	a,_I2C_SR1
3276  00aa a540          	bcp	a,#64
3277  00ac 27f9          	jreq	L5422
3278  00ae               L3222:
3279                     ; 56 	abc:
3279                     ; 57 	if(I2C_BTF==0x04)
3281  00ae c65217        	ld	a,_I2C_SR1
3282  00b1 a404          	and	a,#4
3283  00b3 a104          	cp	a,#4
3284  00b5 26f7          	jrne	L3222
3285                     ; 58 	{i=I2C_DR;}
3287  00b7 c65216        	ld	a,_I2C_DR
3288  00ba 6b01          	ld	(OFST+0,sp),a
3290                     ; 60 	if(I2C_BTF==0){}
3292  00bc c65217        	ld	a,_I2C_SR1
3293  00bf a504          	bcp	a,#4
3294  00c1 26eb          	jrne	L3222
3296                     ; 62 	return i;
3298  00c3 7b01          	ld	a,(OFST+0,sp)
3301  00c5 5b01          	addw	sp,#1
3302  00c7 81            	ret
3343                     ; 23 void AT24CXX_Init(void)
3343                     ; 24 {
3344                     	switch	.text
3345  00c8               _AT24CXX_Init:
3349                     ; 25 	I2C_Init();
3351  00c8 ad82          	call	_I2C_Init
3353                     ; 26 }
3356  00ca 81            	ret
3403                     ; 28 void AT24CXX_WriteAByte(u8 wordAdr,u8 dat)
3403                     ; 29 {
3404                     	switch	.text
3405  00cb               _AT24CXX_WriteAByte:
3407  00cb 89            	pushw	x
3408       00000000      OFST:	set	0
3411                     ; 30 	I2C_Start();
3413  00cc ad9b          	call	_I2C_Start
3415                     ; 31 	I2C_SendDAdr(WD_DADR);
3417  00ce a6a0          	ld	a,#160
3418  00d0 adac          	call	_I2C_SendDAdr
3420                     ; 32 	I2C_SendDat(wordAdr);
3422  00d2 7b01          	ld	a,(OFST+1,sp)
3423  00d4 adbc          	call	_I2C_SendDat
3425                     ; 33 	I2C_SendDat(dat);
3427  00d6 7b02          	ld	a,(OFST+2,sp)
3428  00d8 adb8          	call	_I2C_SendDat
3430                     ; 34 	I2C_stop();
3432  00da 72125211      	bset	_I2C_CR2,#1
3433                     ; 35 }
3437  00de 85            	popw	x
3438  00df 81            	ret
3486                     ; 37 u8 AT24CXX_ReadAByte(u8 wordAdr)
3486                     ; 38 {
3487                     	switch	.text
3488  00e0               _AT24CXX_ReadAByte:
3490  00e0 88            	push	a
3491  00e1 88            	push	a
3492       00000001      OFST:	set	1
3495                     ; 40 	I2C_Start();
3497  00e2 ad85          	call	_I2C_Start
3499                     ; 41 	I2C_SendDAdr(WD_DADR);
3501  00e4 a6a0          	ld	a,#160
3502  00e6 ad96          	call	_I2C_SendDAdr
3504                     ; 42 	I2C_SendDat(wordAdr);
3506  00e8 7b02          	ld	a,(OFST+1,sp)
3507  00ea ada6          	call	_I2C_SendDat
3509                     ; 43 	I2C_Start();
3511  00ec cd0069        	call	_I2C_Start
3513                     ; 44 	I2C_NAck();
3515  00ef 72155211      	bres	_I2C_CR2,#2
3516                     ; 45 	I2C_SendDAdr(RD_DADR);
3519  00f3 a6a1          	ld	a,#161
3520  00f5 ad87          	call	_I2C_SendDAdr
3522                     ; 46 	dat=I2C_RcvDat();
3524  00f7 adad          	call	_I2C_RcvDat
3526  00f9 6b01          	ld	(OFST+0,sp),a
3527                     ; 47 	I2C_stop();
3529  00fb 72125211      	bset	_I2C_CR2,#1
3530                     ; 48 	I2C_Ack();
3533  00ff 72145211      	bset	_I2C_CR2,#2
3534                     ; 49 	return dat;
3537  0103 7b01          	ld	a,(OFST+0,sp)
3540  0105 85            	popw	x
3541  0106 81            	ret
3583                     ; 17 void SPI_Init(void)
3583                     ; 18 {
3584                     	switch	.text
3585  0107               _SPI_Init:
3589                     ; 19 	SPI_CR1|=0x38;   //波特率
3591  0107 c65200        	ld	a,_SPI_CR1
3592  010a aa38          	or	a,#56
3593  010c c75200        	ld	_SPI_CR1,a
3594                     ; 24 	SPI_CR2|=0x03;   //配置NSS脚为1
3596  010f c65201        	ld	a,_SPI_CR2
3597  0112 aa03          	or	a,#3
3598  0114 c75201        	ld	_SPI_CR2,a
3599                     ; 25 	SPI_CR1|=0x04;   //配置为主设备
3601  0117 72145200      	bset	_SPI_CR1,#2
3602                     ; 26 	SPI_CR1|=0x40;   //开启SPI
3604  011b 721c5200      	bset	_SPI_CR1,#6
3605                     ; 27 }
3608  011f 81            	ret
3644                     ; 29 void SPI_sendchar(u8 data)
3644                     ; 30 {	
3645                     	switch	.text
3646  0120               _SPI_sendchar:
3650                     ; 31 	SPI_DR=data;
3652  0120 c75204        	ld	_SPI_DR,a
3654  0123               L3042:
3655                     ; 32 	while(!(SPI_SR & 0x02));
3657  0123 c65203        	ld	a,_SPI_SR
3658  0126 a502          	bcp	a,#2
3659  0128 27f9          	jreq	L3042
3660                     ; 33 }
3663  012a 81            	ret
3699                     ; 35 u8 SPI_rechar(void)
3699                     ; 36 {	
3700                     	switch	.text
3701  012b               _SPI_rechar:
3703  012b 88            	push	a
3704       00000001      OFST:	set	1
3707                     ; 38 	data=SPI_DR;
3709  012c c65204        	ld	a,_SPI_DR
3710  012f 6b01          	ld	(OFST+0,sp),a
3712  0131               L1342:
3713                     ; 39 	while(!(SPI_SR & 0x01));

⌨️ 快捷键说明

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