📄 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
3016 ; 18 void _delay_us(u8 us)
3016 ; 19 {
3017 switch .text
3018 004c __delay_us:
3020 004c 88 push a
3021 00000000 OFST: set 0
3024 004d L3212:
3025 ; 20 while(--us);
3027 004d 0a01 dec (OFST+1,sp)
3028 004f 26fc jrne L3212
3029 ; 21 }
3032 0051 84 pop a
3033 0052 81 ret
3060 ; 24 void resetOnewire(void)
3060 ; 25 {
3061 switch .text
3062 0053 _resetOnewire:
3066 ; 26 OUT_DQ();
3068 0053 7214500c bset _PC_DDR,#2
3069 ; 27 CLR_DQ();
3071 0057 7215500a bres _PC_ODR,#2
3072 ; 28 _delay_us(750);
3074 005b a6ee ld a,#238
3075 005d aded call __delay_us
3077 ; 29 SET_DQ();
3079 005f 7214500a bset _PC_ODR,#2
3080 ; 30 _delay_us(100);
3082 0063 a664 ld a,#100
3083 0065 ade5 call __delay_us
3085 ; 31 IN_DQ();
3087 0067 7215500c bres _PC_DDR,#2
3089 006b L1412:
3090 ; 33 while(!(GET_DQ()));
3092 006b c6500b ld a,_PC_IDR
3093 006e a504 bcp a,#4
3094 0070 27f9 jreq L1412
3095 ; 34 SET_DQ();
3097 0072 7214500a bset _PC_ODR,#2
3098 ; 35 }
3101 0076 81 ret
3148 ; 38 u8 rOnewire(void)
3148 ; 39 {
3149 switch .text
3150 0077 _rOnewire:
3152 0077 89 pushw x
3153 00000002 OFST: set 2
3156 ; 40 u8 data=0,i=0;
3158 0078 0f02 clr (OFST+0,sp)
3161 ; 41 for(i=0;i<8;i++)
3163 007a 0f01 clr (OFST-1,sp)
3164 007c L7612:
3165 ; 43 data=data>>1;
3167 007c 0402 srl (OFST+0,sp)
3168 ; 44 OUT_DQ();
3170 007e 7214500c bset _PC_DDR,#2
3171 ; 45 CLR_DQ();
3173 0082 7215500a bres _PC_ODR,#2
3174 ; 46 IN_DQ();
3176 0086 7215500c bres _PC_DDR,#2
3177 ; 47 if(GET_DQ()) data|=0x80;
3179 008a c6500b ld a,_PC_IDR
3180 008d a504 bcp a,#4
3181 008f 2708 jreq L3022
3184 0091 7b02 ld a,(OFST+0,sp)
3185 0093 aa80 or a,#128
3186 0095 6b02 ld (OFST+0,sp),a
3188 0097 2007 jra L7712
3189 0099 L3022:
3190 ; 48 else while(!(GET_DQ()));
3192 0099 c6500b ld a,_PC_IDR
3193 009c a504 bcp a,#4
3194 009e 27f9 jreq L3022
3195 00a0 L7712:
3196 ; 49 _delay_us(60);
3198 00a0 a63c ld a,#60
3199 00a2 ada8 call __delay_us
3201 ; 41 for(i=0;i<8;i++)
3203 00a4 0c01 inc (OFST-1,sp)
3206 00a6 7b01 ld a,(OFST-1,sp)
3207 00a8 a108 cp a,#8
3208 00aa 25d0 jrult L7612
3209 ; 51 return(data);
3211 00ac 7b02 ld a,(OFST+0,sp)
3214 00ae 85 popw x
3215 00af 81 ret
3261 ; 54 void wOnewire(u8 data)
3261 ; 55 {
3262 switch .text
3263 00b0 _wOnewire:
3265 00b0 88 push a
3266 00b1 88 push a
3267 00000001 OFST: set 1
3270 ; 56 u8 i=0;
3272 ; 57 OUT_DQ();
3274 00b2 7214500c bset _PC_DDR,#2
3275 ; 58 for(i=0;i<8;i++)
3277 00b6 0f01 clr (OFST+0,sp)
3278 00b8 L1322:
3279 ; 60 CLR_DQ();
3281 00b8 7215500a bres _PC_ODR,#2
3282 ; 61 if(data&0x01)
3284 00bc 7b02 ld a,(OFST+1,sp)
3285 00be a501 bcp a,#1
3286 00c0 2706 jreq L7322
3287 ; 63 SET_DQ();
3289 00c2 7214500a bset _PC_ODR,#2
3291 00c6 2004 jra L1422
3292 00c8 L7322:
3293 ; 67 CLR_DQ();
3295 00c8 7215500a bres _PC_ODR,#2
3296 00cc L1422:
3297 ; 69 data=data>>1;
3299 00cc 0402 srl (OFST+1,sp)
3300 ; 70 _delay_us(60); //65
3302 00ce a63c ld a,#60
3303 00d0 cd004c call __delay_us
3305 ; 71 SET_DQ();
3307 00d3 7214500a bset _PC_ODR,#2
3308 ; 58 for(i=0;i<8;i++)
3310 00d7 0c01 inc (OFST+0,sp)
3313 00d9 7b01 ld a,(OFST+0,sp)
3314 00db a108 cp a,#8
3315 00dd 25d9 jrult L1322
3316 ; 73 }
3319 00df 85 popw x
3320 00e0 81 ret
3362 ; 17 void convertDs18b20(void)
3362 ; 18 {
3363 switch .text
3364 00e1 _convertDs18b20:
3368 ; 19 resetOnewire();
3370 00e1 cd0053 call _resetOnewire
3372 ; 20 wOnewire(0xcc);
3374 00e4 a6cc ld a,#204
3375 00e6 adc8 call _wOnewire
3377 ; 21 wOnewire(0x44);
3379 00e8 a644 ld a,#68
3380 00ea adc4 call _wOnewire
3382 ; 22 }
3385 00ec 81 ret
3432 ; 24 u8 readTemp(void)
3432 ; 25 {
3433 switch .text
3434 00ed _readTemp:
3436 00ed 89 pushw x
3437 00000002 OFST: set 2
3440 ; 27 convertDs18b20();
3442 00ee adf1 call _convertDs18b20
3444 ; 28 resetOnewire();
3446 00f0 cd0053 call _resetOnewire
3448 ; 29 wOnewire(0xcc);
3450 00f3 a6cc ld a,#204
3451 00f5 adb9 call _wOnewire
3453 ; 30 wOnewire(0xbe);
3455 00f7 a6be ld a,#190
3456 00f9 adb5 call _wOnewire
3458 ; 31 temp1=rOnewire();
3460 00fb cd0077 call _rOnewire
3462 00fe 6b01 ld (OFST-1,sp),a
3463 ; 32 temp2=rOnewire();
3465 0100 cd0077 call _rOnewire
3467 0103 6b02 ld (OFST+0,sp),a
3468 ; 33 temp2=temp2<<4;
3470 0105 7b02 ld a,(OFST+0,sp)
3471 0107 4e swap a
3472 0108 a4f0 and a,#240
3473 010a 6b02 ld (OFST+0,sp),a
3474 ; 34 temp1=temp1>>4;
3476 010c 7b01 ld a,(OFST-1,sp)
3477 010e 4e swap a
3478 010f a40f and a,#15
3479 0111 6b01 ld (OFST-1,sp),a
3480 ; 35 temp2|=temp1;
3482 0113 7b02 ld a,(OFST+0,sp)
3483 0115 1a01 or a,(OFST-1,sp)
3484 0117 6b02 ld (OFST+0,sp),a
3485 ; 37 return (temp2&0x7F);
3487 0119 7b02 ld a,(OFST+0,sp)
3488 011b a47f and a,#127
3491 011d 85 popw x
3492 011e 81 ret
3534 ; 17 void SPI_Init(void)
3534 ; 18 {
3535 switch .text
3536 011f _SPI_Init:
3540 ; 19 SPI_CR1|=0x38; //波特率
3542 011f c65200 ld a,_SPI_CR1
3543 0122 aa38 or a,#56
3544 0124 c75200 ld _SPI_CR1,a
3545 ; 24 SPI_CR2|=0x03; //配置NSS脚为1
3547 0127 c65201 ld a,_SPI_CR2
3548 012a aa03 or a,#3
3549 012c c75201 ld _SPI_CR2,a
3550 ; 25 SPI_CR1|=0x04; //配置为主设备
3552 012f 72145200 bset _SPI_CR1,#2
3553 ; 26 SPI_CR1|=0x40; //开启SPI
3555 0133 721c5200 bset _SPI_CR1,#6
3556 ; 27 }
3559 0137 81 ret
3595 ; 29 void SPI_sendchar(u8 data)
3595 ; 30 {
3596 switch .text
3597 0138 _SPI_sendchar:
3601 ; 31 SPI_DR=data;
3603 0138 c75204 ld _SPI_DR,a
3605 013b L3432:
3606 ; 32 while(!(SPI_SR & 0x02));
3608 013b c65203 ld a,_SPI_SR
3609 013e a502 bcp a,#2
3610 0140 27f9 jreq L3432
3611 ; 33 }
3614 0142 81 ret
3650 ; 35 u8 SPI_rechar(void)
3650 ; 36 {
3651 switch .text
3652 0143 _SPI_rechar:
3654 0143 88 push a
3655 00000001 OFST: set 1
3658 ; 38 data=SPI_DR;
3660 0144 c65204 ld a,_SPI_DR
3661 0147 6b01 ld (OFST+0,sp),a
3663 0149 L1732:
3664 ; 39 while(!(SPI_SR & 0x01));
3666 0149 c65203 ld a,_SPI_SR
3667 014c a501 bcp a,#1
3668 014e 27f9 jreq L1732
3669 ; 40 return data;
3671 0150 7b01 ld a,(OFST+0,sp)
3674 0152 5b01 addw sp,#1
3675 0154 81 ret
3734 ; 21 void st7920LcdInit(void)
3734 ; 22 {
3735 switch .text
3736 0155 _st7920LcdInit:
3738 0155 88 push a
3739 00000001 OFST: set 1
3742 ; 24 SPI_Init();
3744 0156 adc7 call _SPI_Init
3746 ; 25 delay_ms(100);
3748 0158 ae0064 ldw x,#100
3749 015b cd0000 call _delay_ms
3751 ; 26 PE_DDR|=0x20;
3753 015e 721a5016 bset _PE_DDR,#5
3754 ; 27 PE_CR1|=0x20;
3756 0162 721a5017 bset _PE_CR1,#5
3757 ; 28 PE_CR2|=0x20;
3759 0166 721a5018 bset _PE_CR2,#5
3760 ; 29 sendCodeST7920(0x0c);//整体显示
3762 016a a60c ld a,#12
3763 016c ad1c call _sendCodeST7920
3765 ; 30 sendCodeST7920(0x01);//清屏
3767 016e a601 ld a,#1
3768 0170 ad18 call _sendCodeST7920
3770 ; 31 sendCodeST7920(0x02);
3772 0172 a602 ld a,#2
3773 0174 ad14 call _sendCodeST7920
3775 ; 32 for(i=0;i<64;i++)
3777 0176 0f01 clr (OFST+0,sp)
3778 0178 L1242:
3779 ; 33 lcd_buffer[i]=' ';
3781 0178 7b01 ld a,(OFST+0,sp)
3782 017a 5f clrw x
3783 017b 97 ld xl,a
3784 017c a620 ld a,#32
3785 017e e700 ld (_lcd_buffer,x),a
3786 ; 32 for(i=0;i<64;i++)
3788 0180 0c01 inc (OFST+0,sp)
3791 0182 7b01 ld a,(OFST+0,sp)
3792 0184 a140 cp a,#64
3793 0186 25f0 jrult L1242
3794 ; 35 }
3797 0188 84 pop a
3798 0189 81 ret
3835 ; 37 void sendCodeST7920(u8 Lcd_cmd)
3835 ; 38 {
3836 switch .text
3837 018a _sendCodeST7920:
3839 018a 88 push a
3840 00000000 OFST: set 0
3843 ; 39 E_CLK
3845 018b 721b5014 bres _PE_ODR,#5
3846 ; 40 LCD_DELAY()
3849 018f 9d nop
3854 0190 9d nop
3859 0191 9d nop
3864 0192 9d nop
3869 0193 9d nop
3871 ; 41 E_SET
3873 0194 721a5014 bset _PE_ODR,#5
3874 ; 42 SPI_sendchar(0xF8);
3876 0198 a6f8 ld a,#248
3877 019a ad9c call _SPI_sendchar
3879 ; 43 SPI_sendchar(Lcd_cmd & 0xF0);
3881 019c 7b01 ld a,(OFST+1,sp)
3882 019e a4f0 and a,#240
3883 01a0 ad96 call _SPI_sendchar
3885 ; 44 SPI_sendchar(Lcd_cmd << 4);
3887 01a2 7b01 ld a,(OFST+1,sp)
3888 01a4 97 ld xl,a
3889 01a5 a610 ld a,#16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -