📄 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
3007 ; 17 void SPI_Init(void)
3007 ; 18 {
3008 switch .text
3009 004c _SPI_Init:
3013 ; 19 SPI_CR1|=0x38; //波特率
3015 004c c65200 ld a,_SPI_CR1
3016 004f aa38 or a,#56
3017 0051 c75200 ld _SPI_CR1,a
3018 ; 24 SPI_CR2|=0x03; //配置NSS脚为1
3020 0054 c65201 ld a,_SPI_CR2
3021 0057 aa03 or a,#3
3022 0059 c75201 ld _SPI_CR2,a
3023 ; 25 SPI_CR1|=0x04; //配置为主设备
3025 005c 72145200 bset _SPI_CR1,#2
3026 ; 26 SPI_CR1|=0x40; //开启SPI
3028 0060 721c5200 bset _SPI_CR1,#6
3029 ; 27 }
3032 0064 81 ret
3068 ; 29 void SPI_sendchar(u8 data)
3068 ; 30 {
3069 switch .text
3070 0065 _SPI_sendchar:
3074 ; 31 SPI_DR=data;
3076 0065 c75204 ld _SPI_DR,a
3078 0068 L5312:
3079 ; 32 while(!(SPI_SR & 0x02));
3081 0068 c65203 ld a,_SPI_SR
3082 006b a502 bcp a,#2
3083 006d 27f9 jreq L5312
3084 ; 33 }
3087 006f 81 ret
3123 ; 35 u8 SPI_rechar(void)
3123 ; 36 {
3124 switch .text
3125 0070 _SPI_rechar:
3127 0070 88 push a
3128 00000001 OFST: set 1
3131 ; 38 data=SPI_DR;
3133 0071 c65204 ld a,_SPI_DR
3134 0074 6b01 ld (OFST+0,sp),a
3136 0076 L3612:
3137 ; 39 while(!(SPI_SR & 0x01));
3139 0076 c65203 ld a,_SPI_SR
3140 0079 a501 bcp a,#1
3141 007b 27f9 jreq L3612
3142 ; 40 return data;
3144 007d 7b01 ld a,(OFST+0,sp)
3147 007f 5b01 addw sp,#1
3148 0081 81 ret
3192 ; 23 void AT45DBXX_Init(void)
3192 ; 24 {/*
3193 switch .text
3194 0082 _AT45DBXX_Init:
3198 ; 33 SPI_Init();
3200 0082 adc8 call _SPI_Init
3202 ; 34 PE_DDR|=0x20;
3204 0084 721a5016 bset _PE_DDR,#5
3205 ; 35 PE_CR1|=0x20;
3207 0088 721a5017 bset _PE_CR1,#5
3208 ; 36 CS_SET;
3210 008c 721a5014 bset _PE_ODR,#5
3211 ; 37 }
3215 0090 81 ret
3261 ; 54 void write_buffer(u16 BufferOffset,u8 Data)
3261 ; 55 {
3262 switch .text
3263 0091 _write_buffer:
3265 0091 89 pushw x
3266 00000000 OFST: set 0
3269 ; 56 CS_CLK;
3271 0092 721b5014 bres _PE_ODR,#5
3272 ; 57 delay_us(10);
3275 0096 ae000a ldw x,#10
3276 0099 ad8b call _delay_us
3278 ; 58 SPI_sendchar(0x84);
3280 009b a684 ld a,#132
3281 009d adc6 call _SPI_sendchar
3283 ; 59 SPI_sendchar(0xff);
3285 009f a6ff ld a,#255
3286 00a1 adc2 call _SPI_sendchar
3288 ; 60 SPI_sendchar((u8)BufferOffset>>8);
3290 00a3 4f clr a
3291 00a4 adbf call _SPI_sendchar
3293 ; 61 SPI_sendchar((u8)BufferOffset);
3295 00a6 7b02 ld a,(OFST+2,sp)
3296 00a8 adbb call _SPI_sendchar
3298 ; 62 SPI_sendchar(Data);
3300 00aa 7b05 ld a,(OFST+5,sp)
3301 00ac adb7 call _SPI_sendchar
3303 ; 63 delay_us(10);
3305 00ae ae000a ldw x,#10
3306 00b1 cd0026 call _delay_us
3308 ; 64 CS_SET;
3310 00b4 721a5014 bset _PE_ODR,#5
3311 ; 65 }
3315 00b8 85 popw x
3316 00b9 81 ret
3363 ; 67 u8 read_buffer(u16 BufferOffset)
3363 ; 68 {
3364 switch .text
3365 00ba _read_buffer:
3367 00ba 89 pushw x
3368 00bb 88 push a
3369 00000001 OFST: set 1
3372 ; 70 CS_CLK;
3374 00bc 721b5014 bres _PE_ODR,#5
3375 ; 71 delay_us(10);
3378 00c0 ae000a ldw x,#10
3379 00c3 cd0026 call _delay_us
3381 ; 72 SPI_sendchar(0xd4);
3383 00c6 a6d4 ld a,#212
3384 00c8 ad9b call _SPI_sendchar
3386 ; 73 SPI_sendchar(0xff);
3388 00ca a6ff ld a,#255
3389 00cc ad97 call _SPI_sendchar
3391 ; 74 SPI_sendchar((u8)BufferOffset>>8);
3393 00ce 4f clr a
3394 00cf ad94 call _SPI_sendchar
3396 ; 75 SPI_sendchar((u8)BufferOffset);
3398 00d1 7b03 ld a,(OFST+2,sp)
3399 00d3 ad90 call _SPI_sendchar
3401 ; 76 SPI_sendchar(0xff);
3403 00d5 a6ff ld a,#255
3404 00d7 ad8c call _SPI_sendchar
3406 ; 77 SPI_sendchar(0xff);
3408 00d9 a6ff ld a,#255
3409 00db ad88 call _SPI_sendchar
3411 ; 78 temp=SPI_rechar();
3413 00dd ad91 call _SPI_rechar
3415 00df 6b01 ld (OFST+0,sp),a
3416 ; 79 delay_us(10);
3418 00e1 ae000a ldw x,#10
3419 00e4 cd0026 call _delay_us
3421 ; 80 CS_SET;
3423 00e7 721a5014 bset _PE_ODR,#5
3424 ; 81 return temp;
3427 00eb 7b01 ld a,(OFST+0,sp)
3430 00ed 5b03 addw sp,#3
3431 00ef 81 ret
3490 ; 21 void st7920LcdInit(void)
3490 ; 22 {
3491 switch .text
3492 00f0 _st7920LcdInit:
3494 00f0 88 push a
3495 00000001 OFST: set 1
3498 ; 24 SPI_Init();
3500 00f1 cd004c call _SPI_Init
3502 ; 25 delay_ms(100);
3504 00f4 ae0064 ldw x,#100
3505 00f7 cd0000 call _delay_ms
3507 ; 26 PE_DDR|=0x20;
3509 00fa 721a5016 bset _PE_DDR,#5
3510 ; 27 PE_CR1|=0x20;
3512 00fe 721a5017 bset _PE_CR1,#5
3513 ; 28 PE_CR2|=0x20;
3515 0102 721a5018 bset _PE_CR2,#5
3516 ; 29 sendCodeST7920(0x0c);//整体显示
3518 0106 a60c ld a,#12
3519 0108 ad1c call _sendCodeST7920
3521 ; 30 sendCodeST7920(0x01);//清屏
3523 010a a601 ld a,#1
3524 010c ad18 call _sendCodeST7920
3526 ; 31 sendCodeST7920(0x02);
3528 010e a602 ld a,#2
3529 0110 ad14 call _sendCodeST7920
3531 ; 32 for(i=0;i<64;i++)
3533 0112 0f01 clr (OFST+0,sp)
3534 0114 L5722:
3535 ; 33 lcd_buffer[i]=' ';
3537 0114 7b01 ld a,(OFST+0,sp)
3538 0116 5f clrw x
3539 0117 97 ld xl,a
3540 0118 a620 ld a,#32
3541 011a e700 ld (_lcd_buffer,x),a
3542 ; 32 for(i=0;i<64;i++)
3544 011c 0c01 inc (OFST+0,sp)
3547 011e 7b01 ld a,(OFST+0,sp)
3548 0120 a140 cp a,#64
3549 0122 25f0 jrult L5722
3550 ; 35 }
3553 0124 84 pop a
3554 0125 81 ret
3591 ; 37 void sendCodeST7920(u8 Lcd_cmd)
3591 ; 38 {
3592 switch .text
3593 0126 _sendCodeST7920:
3595 0126 88 push a
3596 00000000 OFST: set 0
3599 ; 39 E_CLK
3601 0127 721b5014 bres _PE_ODR,#5
3602 ; 40 LCD_DELAY()
3605 012b 9d nop
3610 012c 9d nop
3615 012d 9d nop
3620 012e 9d nop
3625 012f 9d nop
3627 ; 41 E_SET
3629 0130 721a5014 bset _PE_ODR,#5
3630 ; 42 SPI_sendchar(0xF8);
3632 0134 a6f8 ld a,#248
3633 0136 cd0065 call _SPI_sendchar
3635 ; 43 SPI_sendchar(Lcd_cmd & 0xF0);
3637 0139 7b01 ld a,(OFST+1,sp)
3638 013b a4f0 and a,#240
3639 013d cd0065 call _SPI_sendchar
3641 ; 44 SPI_sendchar(Lcd_cmd << 4);
3643 0140 7b01 ld a,(OFST+1,sp)
3644 0142 97 ld xl,a
3645 0143 a610 ld a,#16
3646 0145 42 mul x,a
3647 0146 9f ld a,xl
3648 0147 cd0065 call _SPI_sendchar
3650 ; 45 LCD_DELAY()
3653 014a 9d nop
3658 014b 9d nop
3663 014c 9d nop
3668 014d 9d nop
3673 014e 9d nop
3675 ; 46 E_CLK
3677 014f 721b5014 bres _PE_ODR,#5
3678 ; 47 LCD_DELAY()
3681 0153 9d nop
3686 0154 9d nop
3691 0155 9d nop
3696 0156 9d nop
3701 0157 9d nop
3703 ; 48 }
3706 0158 84 pop a
3707 0159 81 ret
3744 ; 50 void sendDataST7920(u8 Lcd_data)
3744 ; 51 {
3745 switch .text
3746 015a _sendDataST7920:
3748 015a 88 push a
3749 00000000 OFST: set 0
3752 ; 52 E_CLK
3754 015b 721b5014 bres _PE_ODR,#5
3755 ; 53 LCD_DELAY()
3758 015f 9d nop
3763 0160 9d nop
3768 0161 9d nop
3773 0162 9d nop
3778 0163 9d nop
3780 ; 54 E_SET
3782 0164 721a5014 bset _PE_ODR,#5
3783 ; 55 SPI_sendchar(0xFA);
3785 0168 a6fa ld a,#250
3786 016a cd0065 call _SPI_sendchar
3788 ; 56 SPI_sendchar(Lcd_data & 0xF0);
3790 016d 7b01 ld a,(OFST+1,sp)
3791 016f a4f0 and a,#240
3792 0171 cd0065 call _SPI_sendchar
3794 ; 57 SPI_sendchar(Lcd_data << 4);
3796 0174 7b01 ld a,(OFST+1,sp)
3797 0176 97 ld xl,a
3798 0177 a610 ld a,#16
3799 0179 42 mul x,a
3800 017a 9f ld a,xl
3801 017b cd0065 call _SPI_sendchar
3803 ; 58 LCD_DELAY()
3806 017e 9d nop
3811 017f 9d nop
3816 0180 9d nop
3821 0181 9d nop
3826 0182 9d nop
3828 ; 59 E_CLK
3830 0183 721b5014 bres _PE_ODR,#5
3831 ; 60 LCD_DELAY()
3834 0187 9d nop
3839 0188 9d nop
3844 0189 9d nop
3849 018a 9d nop
3854 018b 9d nop
3856 ; 61 }
3859 018c 84 pop a
3860 018d 81 ret
3906 ; 63 void refreshLCD(const u8 *lcd_stack)
3906 ; 64 {
3907 switch .text
3908 018e _refreshLCD:
3910 018e 89 pushw x
3911 018f 88 push a
3912 00000001 OFST: set 1
3915 ; 66 sendCodeST7920(0x02); //地址归位
3917 0190 a602 ld a,#2
3918 0192 ad92 call _sendCodeST7920
3920 ; 67 for(addr=0;addr<16;addr++)
3922 0194 0f01 clr (OFST+0,sp)
3923 0196 L1632:
3924 ; 69 sendDataST7920(*(lcd_stack + addr));
3926 0196 7b02 ld a,(OFST+1,sp)
3927 0198 97 ld xl,a
3928 0199 7b03 ld a,(OFST+2,sp)
3929 019b 1b01 add a,(OFST+0,sp)
3930 019d 2401 jrnc L43
3931 019f 5c incw x
3932 01a0 L43:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -