📄 main.ls
字号:
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 + -