📄 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
3026 ; 19 void hc164SetDat(u8 dat)
3026 ; 20 {
3027 switch .text
3028 004c _hc164SetDat:
3030 004c 88 push a
3031 004d 88 push a
3032 00000001 OFST: set 1
3035 ; 22 for(i=0;i<8;i++)
3037 004e 0f01 clr (OFST+0,sp)
3038 0050 L5212:
3039 ; 24 HC164_CLR_CLK;
3041 0050 7219500a bres _PC_ODR,#4
3042 ; 25 if(dat&0x80)
3044 0054 7b02 ld a,(OFST+1,sp)
3045 0056 a580 bcp a,#128
3046 0058 270a jreq L3312
3047 ; 27 HC164_SET_DATA;
3049 005a 7216500a bset _PC_ODR,#3
3050 ; 28 HC164_SET_CLK;
3052 005e 7218500a bset _PC_ODR,#4
3054 0062 2008 jra L5312
3055 0064 L3312:
3056 ; 32 HC164_CLR_DATA;
3058 0064 7217500a bres _PC_ODR,#3
3059 ; 33 HC164_SET_CLK;
3061 0068 7218500a bset _PC_ODR,#4
3062 006c L5312:
3063 ; 35 dat = dat<<1;
3065 006c 0802 sll (OFST+1,sp)
3066 ; 22 for(i=0;i<8;i++)
3068 006e 0c01 inc (OFST+0,sp)
3071 0070 7b01 ld a,(OFST+0,sp)
3072 0072 a108 cp a,#8
3073 0074 25da jrult L5212
3074 ; 37 }
3077 0076 85 popw x
3078 0077 81 ret
3104 ; 39 void hc164Init(void)
3104 ; 40 {
3105 switch .text
3106 0078 _hc164Init:
3110 ; 41 HC164_OUT_DATA;
3112 0078 7216500c bset _PC_DDR,#3
3115 007c 7216500d bset _PC_CR1,#3
3118 0080 7216500e bset _PC_CR2,#3
3119 ; 42 HC164_OUT_CLK;
3122 0084 7218500c bset _PC_DDR,#4
3125 0088 7218500d bset _PC_CR1,#4
3128 008c 7218500e bset _PC_CR2,#4
3129 ; 43 }
3133 0090 81 ret
3196 ; 20 u8 hc165GetDat(void)
3196 ; 21 {
3197 switch .text
3198 0091 _hc165GetDat:
3200 0091 89 pushw x
3201 00000002 OFST: set 2
3204 ; 22 u8 i,dat=0;
3206 0092 0f02 clr (OFST+0,sp)
3207 ; 23 HC165_CLR_PL;
3209 0094 72155014 bres _PE_ODR,#2
3210 ; 24 HC165_SET_PL;
3212 0098 72145014 bset _PE_ODR,#2
3213 ; 25 for(i=0;i<8;i++)
3215 009c 0f01 clr (OFST-1,sp)
3216 009e L7712:
3217 ; 27 HC165_CLR_TXD;
3219 009e 721b500f bres _PD_ODR,#5
3220 ; 28 dat=dat<<1;
3222 00a2 0802 sll (OFST+0,sp)
3223 ; 29 if(HC165_GET_RXD)
3225 00a4 c65010 ld a,_PD_IDR
3226 00a7 a540 bcp a,#64
3227 00a9 2706 jreq L5022
3228 ; 31 dat|=0x01;
3230 00ab 7b02 ld a,(OFST+0,sp)
3231 00ad aa01 or a,#1
3232 00af 6b02 ld (OFST+0,sp),a
3233 00b1 L5022:
3234 ; 33 HC165_SET_TXD;
3236 00b1 721a500f bset _PD_ODR,#5
3237 ; 25 for(i=0;i<8;i++)
3239 00b5 0c01 inc (OFST-1,sp)
3242 00b7 7b01 ld a,(OFST-1,sp)
3243 00b9 a108 cp a,#8
3244 00bb 25e1 jrult L7712
3245 ; 35 return dat;
3247 00bd 7b02 ld a,(OFST+0,sp)
3250 00bf 85 popw x
3251 00c0 81 ret
3281 ; 38 void hc165Init(void)
3281 ; 39 {
3282 switch .text
3283 00c1 _hc165Init:
3287 ; 40 HC165_OUT_PL;
3289 00c1 72145016 bset _PE_DDR,#2
3292 00c5 72145017 bset _PE_CR1,#2
3295 00c9 72145018 bset _PE_CR2,#2
3296 ; 41 HC165_OUT_TXD;
3299 00cd 721a5011 bset _PD_DDR,#5
3302 00d1 721a5012 bset _PD_CR1,#5
3305 00d5 721a5013 bset _PD_CR2,#5
3306 ; 42 HC165_IN_RXD;
3309 00d9 721d500f bres _PD_ODR,#6
3312 00dd 721d5012 bres _PD_CR1,#6
3315 00e1 721d5013 bres _PD_CR2,#6
3316 ; 43 }
3320 00e5 81 ret
3362 ; 17 void SPI_Init(void)
3362 ; 18 {
3363 switch .text
3364 00e6 _SPI_Init:
3368 ; 19 SPI_CR1|=0x38; //波特率
3370 00e6 c65200 ld a,_SPI_CR1
3371 00e9 aa38 or a,#56
3372 00eb c75200 ld _SPI_CR1,a
3373 ; 24 SPI_CR2|=0x03; //配置NSS脚为1
3375 00ee c65201 ld a,_SPI_CR2
3376 00f1 aa03 or a,#3
3377 00f3 c75201 ld _SPI_CR2,a
3378 ; 25 SPI_CR1|=0x04; //配置为主设备
3380 00f6 72145200 bset _SPI_CR1,#2
3381 ; 26 SPI_CR1|=0x40; //开启SPI
3383 00fa 721c5200 bset _SPI_CR1,#6
3384 ; 27 }
3387 00fe 81 ret
3423 ; 29 void SPI_sendchar(u8 data)
3423 ; 30 {
3424 switch .text
3425 00ff _SPI_sendchar:
3429 ; 31 SPI_DR=data;
3431 00ff c75204 ld _SPI_DR,a
3433 0102 L7522:
3434 ; 32 while(!(SPI_SR & 0x02));
3436 0102 c65203 ld a,_SPI_SR
3437 0105 a502 bcp a,#2
3438 0107 27f9 jreq L7522
3439 ; 33 }
3442 0109 81 ret
3478 ; 35 u8 SPI_rechar(void)
3478 ; 36 {
3479 switch .text
3480 010a _SPI_rechar:
3482 010a 88 push a
3483 00000001 OFST: set 1
3486 ; 38 data=SPI_DR;
3488 010b c65204 ld a,_SPI_DR
3489 010e 6b01 ld (OFST+0,sp),a
3491 0110 L5032:
3492 ; 39 while(!(SPI_SR & 0x01));
3494 0110 c65203 ld a,_SPI_SR
3495 0113 a501 bcp a,#1
3496 0115 27f9 jreq L5032
3497 ; 40 return data;
3499 0117 7b01 ld a,(OFST+0,sp)
3502 0119 5b01 addw sp,#1
3503 011b 81 ret
3562 ; 21 void st7920LcdInit(void)
3562 ; 22 {
3563 switch .text
3564 011c _st7920LcdInit:
3566 011c 88 push a
3567 00000001 OFST: set 1
3570 ; 24 SPI_Init();
3572 011d adc7 call _SPI_Init
3574 ; 25 delay_ms(100);
3576 011f ae0064 ldw x,#100
3577 0122 cd0000 call _delay_ms
3579 ; 26 PE_DDR|=0x20;
3581 0125 721a5016 bset _PE_DDR,#5
3582 ; 27 PE_CR1|=0x20;
3584 0129 721a5017 bset _PE_CR1,#5
3585 ; 28 PE_CR2|=0x20;
3587 012d 721a5018 bset _PE_CR2,#5
3588 ; 29 sendCodeST7920(0x0c);//整体显示
3590 0131 a60c ld a,#12
3591 0133 ad1c call _sendCodeST7920
3593 ; 30 sendCodeST7920(0x01);//清屏
3595 0135 a601 ld a,#1
3596 0137 ad18 call _sendCodeST7920
3598 ; 31 sendCodeST7920(0x02);
3600 0139 a602 ld a,#2
3601 013b ad14 call _sendCodeST7920
3603 ; 32 for(i=0;i<64;i++)
3605 013d 0f01 clr (OFST+0,sp)
3606 013f L5332:
3607 ; 33 lcd_buffer[i]=' ';
3609 013f 7b01 ld a,(OFST+0,sp)
3610 0141 5f clrw x
3611 0142 97 ld xl,a
3612 0143 a620 ld a,#32
3613 0145 e700 ld (_lcd_buffer,x),a
3614 ; 32 for(i=0;i<64;i++)
3616 0147 0c01 inc (OFST+0,sp)
3619 0149 7b01 ld a,(OFST+0,sp)
3620 014b a140 cp a,#64
3621 014d 25f0 jrult L5332
3622 ; 35 }
3625 014f 84 pop a
3626 0150 81 ret
3663 ; 37 void sendCodeST7920(u8 Lcd_cmd)
3663 ; 38 {
3664 switch .text
3665 0151 _sendCodeST7920:
3667 0151 88 push a
3668 00000000 OFST: set 0
3671 ; 39 E_CLK
3673 0152 721b5014 bres _PE_ODR,#5
3674 ; 40 LCD_DELAY()
3677 0156 9d nop
3682 0157 9d nop
3687 0158 9d nop
3692 0159 9d nop
3697 015a 9d nop
3699 ; 41 E_SET
3701 015b 721a5014 bset _PE_ODR,#5
3702 ; 42 SPI_sendchar(0xF8);
3704 015f a6f8 ld a,#248
3705 0161 ad9c call _SPI_sendchar
3707 ; 43 SPI_sendchar(Lcd_cmd & 0xF0);
3709 0163 7b01 ld a,(OFST+1,sp)
3710 0165 a4f0 and a,#240
3711 0167 ad96 call _SPI_sendchar
3713 ; 44 SPI_sendchar(Lcd_cmd << 4);
3715 0169 7b01 ld a,(OFST+1,sp)
3716 016b 97 ld xl,a
3717 016c a610 ld a,#16
3718 016e 42 mul x,a
3719 016f 9f ld a,xl
3720 0170 ad8d call _SPI_sendchar
3722 ; 45 LCD_DELAY()
3725 0172 9d nop
3730 0173 9d nop
3735 0174 9d nop
3740 0175 9d nop
3745 0176 9d nop
3747 ; 46 E_CLK
3749 0177 721b5014 bres _PE_ODR,#5
3750 ; 47 LCD_DELAY()
3753 017b 9d nop
3758 017c 9d nop
3763 017d 9d nop
3768 017e 9d nop
3773 017f 9d nop
3775 ; 48 }
3778 0180 84 pop a
3779 0181 81 ret
3816 ; 50 void sendDataST7920(u8 Lcd_data)
3816 ; 51 {
3817 switch .text
3818 0182 _sendDataST7920:
3820 0182 88 push a
3821 00000000 OFST: set 0
3824 ; 52 E_CLK
3826 0183 721b5014 bres _PE_ODR,#5
3827 ; 53 LCD_DELAY()
3830 0187 9d nop
3835 0188 9d nop
3840 0189 9d nop
3845 018a 9d nop
3850 018b 9d nop
3852 ; 54 E_SET
3854 018c 721a5014 bset _PE_ODR,#5
3855 ; 55 SPI_sendchar(0xFA);
3857 0190 a6fa ld a,#250
3858 0192 cd00ff call _SPI_sendchar
3860 ; 56 SPI_sendchar(Lcd_data & 0xF0);
3862 0195 7b01 ld a,(OFST+1,sp)
3863 0197 a4f0 and a,#240
3864 0199 cd00ff call _SPI_sendchar
3866 ; 57 SPI_sendchar(Lcd_data << 4);
3868 019c 7b01 ld a,(OFST+1,sp)
3869 019e 97 ld xl,a
3870 019f a610 ld a,#16
3871 01a1 42 mul x,a
3872 01a2 9f ld a,xl
3873 01a3 cd00ff call _SPI_sendchar
3875 ; 58 LCD_DELAY()
3878 01a6 9d nop
3883 01a7 9d nop
3888 01a8 9d nop
3893 01a9 9d nop
3898 01aa 9d nop
3900 ; 59 E_CLK
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -