📄 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
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 + -