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

📄 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
3366                     ; 57 void WriteAByte(u8 wordAdr,u8 dat)
3366                     ; 58 {
3367                     	switch	.text
3368  00c8               _WriteAByte:
3370  00c8 89            	pushw	x
3371       00000000      OFST:	set	0
3374                     ; 59 	I2C_Start();
3376  00c9 ad9e          	call	_I2C_Start
3378                     ; 60 	I2C_SendDAdr(WD_DADR);
3380  00cb a6a2          	ld	a,#162
3381  00cd adaf          	call	_I2C_SendDAdr
3383                     ; 61 	I2C_SendDat(wordAdr);
3385  00cf 7b01          	ld	a,(OFST+1,sp)
3386  00d1 adbf          	call	_I2C_SendDat
3388                     ; 62 	I2C_SendDat(dat);
3390  00d3 7b02          	ld	a,(OFST+2,sp)
3391  00d5 adbb          	call	_I2C_SendDat
3393                     ; 63 	I2C_stop();
3395  00d7 72125211      	bset	_I2C_CR2,#1
3396                     ; 64 }
3400  00db 85            	popw	x
3401  00dc 81            	ret
3450                     ; 66 void PCF8563_getTime(u8 *buf)
3450                     ; 67 {  
3451                     	switch	.text
3452  00dd               _PCF8563_getTime:
3454  00dd 89            	pushw	x
3455  00de 89            	pushw	x
3456       00000002      OFST:	set	2
3459                     ; 69 	I2C_Start();
3461  00df ad88          	call	_I2C_Start
3463                     ; 70 	I2C_SendDAdr(WD_DADR);
3465  00e1 a6a2          	ld	a,#162
3466  00e3 ad99          	call	_I2C_SendDAdr
3468                     ; 71 	I2C_SendDat(SECOND_DATA_BUF);
3470  00e5 a602          	ld	a,#2
3471  00e7 ada9          	call	_I2C_SendDat
3473                     ; 72 	I2C_Start();
3475  00e9 cd0069        	call	_I2C_Start
3477                     ; 73 	I2C_SendDAdr(RD_DADR);
3479  00ec a6a3          	ld	a,#163
3480  00ee ad8e          	call	_I2C_SendDAdr
3482                     ; 74 	for(i=0;i<2;i++)
3484  00f0 0f02          	clr	(OFST+0,sp)
3485  00f2               L3332:
3486                     ; 76 		buf[i]=I2C_RcvDat();
3488  00f2 7b03          	ld	a,(OFST+1,sp)
3489  00f4 97            	ld	xl,a
3490  00f5 7b04          	ld	a,(OFST+2,sp)
3491  00f7 1b02          	add	a,(OFST+0,sp)
3492  00f9 2401          	jrnc	L62
3493  00fb 5c            	incw	x
3494  00fc               L62:
3495  00fc 02            	rlwa	x,a
3496  00fd 89            	pushw	x
3497  00fe ada6          	call	_I2C_RcvDat
3499  0100 85            	popw	x
3500  0101 f7            	ld	(x),a
3501                     ; 74 	for(i=0;i<2;i++)
3503  0102 0c02          	inc	(OFST+0,sp)
3506  0104 7b02          	ld	a,(OFST+0,sp)
3507  0106 a102          	cp	a,#2
3508  0108 25e8          	jrult	L3332
3509                     ; 78 	I2C_NAck();
3511  010a 72155211      	bres	_I2C_CR2,#2
3512                     ; 79 	buf[i]=I2C_RcvDat();
3515  010e 7b03          	ld	a,(OFST+1,sp)
3516  0110 97            	ld	xl,a
3517  0111 7b04          	ld	a,(OFST+2,sp)
3518  0113 1b02          	add	a,(OFST+0,sp)
3519  0115 2401          	jrnc	L03
3520  0117 5c            	incw	x
3521  0118               L03:
3522  0118 02            	rlwa	x,a
3523  0119 89            	pushw	x
3524  011a ad8a          	call	_I2C_RcvDat
3526  011c 85            	popw	x
3527  011d f7            	ld	(x),a
3528                     ; 80 	I2C_stop();
3530  011e 72125211      	bset	_I2C_CR2,#1
3531                     ; 81 	I2C_Ack();
3534  0122 72145211      	bset	_I2C_CR2,#2
3535                     ; 83 	buf[0]=buf[0]&0x7f;		//get second data
3538  0126 1e03          	ldw	x,(OFST+1,sp)
3539  0128 f6            	ld	a,(x)
3540  0129 a47f          	and	a,#127
3541  012b f7            	ld	(x),a
3542                     ; 84 	buf[1]=buf[1]&0x7f;		//get minute data
3544  012c 1e03          	ldw	x,(OFST+1,sp)
3545  012e e601          	ld	a,(1,x)
3546  0130 a47f          	and	a,#127
3547  0132 e701          	ld	(1,x),a
3548                     ; 85 	buf[2]=buf[2]&0x3f;		//get hour data
3550  0134 1e03          	ldw	x,(OFST+1,sp)
3551  0136 e602          	ld	a,(2,x)
3552  0138 a43f          	and	a,#63
3553  013a e702          	ld	(2,x),a
3554                     ; 87 	buf[0]=changeHexToInt(buf[0]);
3556  013c 1e03          	ldw	x,(OFST+1,sp)
3557  013e f6            	ld	a,(x)
3558  013f a40f          	and	a,#15
3559  0141 6b01          	ld	(OFST-1,sp),a
3560  0143 1e03          	ldw	x,(OFST+1,sp)
3561  0145 f6            	ld	a,(x)
3562  0146 4e            	swap	a
3563  0147 a40f          	and	a,#15
3564  0149 97            	ld	xl,a
3565  014a a60a          	ld	a,#10
3566  014c 42            	mul	x,a
3567  014d 9f            	ld	a,xl
3568  014e 1b01          	add	a,(OFST-1,sp)
3569  0150 1e03          	ldw	x,(OFST+1,sp)
3570  0152 f7            	ld	(x),a
3571                     ; 88 	buf[1]=changeHexToInt(buf[1]);
3573  0153 1e03          	ldw	x,(OFST+1,sp)
3574  0155 e601          	ld	a,(1,x)
3575  0157 a40f          	and	a,#15
3576  0159 6b01          	ld	(OFST-1,sp),a
3577  015b 1e03          	ldw	x,(OFST+1,sp)
3578  015d e601          	ld	a,(1,x)
3579  015f 4e            	swap	a
3580  0160 a40f          	and	a,#15
3581  0162 97            	ld	xl,a
3582  0163 a60a          	ld	a,#10
3583  0165 42            	mul	x,a
3584  0166 9f            	ld	a,xl
3585  0167 1b01          	add	a,(OFST-1,sp)
3586  0169 1e03          	ldw	x,(OFST+1,sp)
3587  016b e701          	ld	(1,x),a
3588                     ; 89 	buf[2]=changeHexToInt(buf[2]);
3590  016d 1e03          	ldw	x,(OFST+1,sp)
3591  016f e602          	ld	a,(2,x)
3592  0171 a40f          	and	a,#15
3593  0173 6b01          	ld	(OFST-1,sp),a
3594  0175 1e03          	ldw	x,(OFST+1,sp)
3595  0177 e602          	ld	a,(2,x)
3596  0179 4e            	swap	a
3597  017a a40f          	and	a,#15
3598  017c 97            	ld	xl,a
3599  017d a60a          	ld	a,#10
3600  017f 42            	mul	x,a
3601  0180 9f            	ld	a,xl
3602  0181 1b01          	add	a,(OFST-1,sp)
3603  0183 1e03          	ldw	x,(OFST+1,sp)
3604  0185 e702          	ld	(2,x),a
3605                     ; 90 }
3608  0187 5b04          	addw	sp,#4
3609  0189 81            	ret
3662                     ; 92 void PCF8563_setTime(u8 hour,u8 minute,u8 second)
3662                     ; 93 {
3663                     	switch	.text
3664  018a               _PCF8563_setTime:
3666  018a 89            	pushw	x
3667  018b 89            	pushw	x
3668       00000002      OFST:	set	2
3671                     ; 94 	hour=changeIntToHex(hour);		//将数据的Dex格式转换为Hex格式
3673  018c 7b03          	ld	a,(OFST+1,sp)
3674  018e 5f            	clrw	x

⌨️ 快捷键说明

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