📄 main.ls
字号:
1 ; C Compiler for STM8 (COSMIC Software)
2 ; Parser V4.9.10 - 10 Feb 2011
3 ; Generator (Limited) V4.3.6 - 15 Feb 2011
2776 bsct
2777 0000 _table:
2778 0000 c0 dc.b 192
2779 0001 f9 dc.b 249
2780 0002 a4 dc.b 164
2781 0003 b0 dc.b 176
2782 0004 99 dc.b 153
2783 0005 92 dc.b 146
2784 0006 82 dc.b 130
2785 0007 f8 dc.b 248
2786 0008 80 dc.b 128
2787 0009 90 dc.b 144
2788 000a 88 dc.b 136
2789 000b 83 dc.b 131
2790 000c c6 dc.b 198
2791 000d a1 dc.b 161
2792 000e 86 dc.b 134
2793 000f 8e dc.b 142
2842 ; 12 void delay(uint a) //延时子函数
2842 ; 13 {
2844 switch .text
2845 0000 _delay:
2847 0000 89 pushw x
2848 0001 88 push a
2849 00000001 OFST: set 1
2852 ; 15 for(a;a>0;a--)
2855 0002 2011 jra L3102
2856 0004 L7002:
2857 ; 16 for(i=0;i<200;i++);
2859 0004 0f01 clr (OFST+0,sp)
2860 0006 L7102:
2864 0006 0c01 inc (OFST+0,sp)
2867 0008 7b01 ld a,(OFST+0,sp)
2868 000a a1c8 cp a,#200
2869 000c 25f8 jrult L7102
2870 ; 15 for(a;a>0;a--)
2872 000e 1e02 ldw x,(OFST+1,sp)
2873 0010 1d0001 subw x,#1
2874 0013 1f02 ldw (OFST+1,sp),x
2875 0015 L3102:
2878 0015 1e02 ldw x,(OFST+1,sp)
2879 0017 26eb jrne L7002
2880 ; 17 }
2883 0019 5b03 addw sp,#3
2884 001b 81 ret
2915 ; 18 void init(void) //初始化函数
2915 ; 19 {
2916 switch .text
2917 001c _init:
2921 ; 20 PB_DDR=0xff;
2923 001c 35ff5007 mov _PB_DDR,#255
2924 ; 21 PB_CR1=0xff; //把PB设置为推挽输出
2926 0020 35ff5008 mov _PB_CR1,#255
2927 ; 22 PB_CR2=0x00;
2929 0024 725f5009 clr _PB_CR2
2930 ; 24 PC_DDR=0xff;
2932 0028 35ff500c mov _PC_DDR,#255
2933 ; 25 PC_CR1=0xff; //把PC设置为推挽输出
2935 002c 35ff500d mov _PC_CR1,#255
2936 ; 26 PC_CR2=0x00;
2938 0030 725f500e clr _PC_CR2
2939 ; 28 CLK_SWR=0xe1; //选内部高速时钟作为主时钟
2941 0034 35e150c4 mov _CLK_SWR,#225
2942 ; 29 CLK_CKDIVR=0x18; //时钟分频,这里为2MHz,读者可以参考stm8s系列数据参考手册改变频率,并观察数码管显示的变化
2944 0038 351850c6 mov _CLK_CKDIVR,#24
2945 ; 30 }
2948 003c 81 ret
3005 ; 31 void main()
3005 ; 32 {
3006 switch .text
3007 003d _main:
3009 003d 5203 subw sp,#3
3010 00000003 OFST: set 3
3013 ; 34 init();
3015 003f addb call _init
3017 0041 L3602:
3018 ; 37 for(i=0;i<16;i++) //有十六个数要显示
3020 0041 0f02 clr (OFST-1,sp)
3021 0043 L7602:
3022 ; 39 for(j=0;j<62;j++) //每个数扫描62次
3024 0043 0f01 clr (OFST-2,sp)
3025 0045 L5702:
3026 ; 41 for(k=0;k<8;k++) //8个数码管
3028 0045 0f03 clr (OFST+0,sp)
3029 0047 L3012:
3030 ; 43 PB_ODR=table[i]; //显示第i个数
3032 0047 7b02 ld a,(OFST-1,sp)
3033 0049 5f clrw x
3034 004a 97 ld xl,a
3035 004b e600 ld a,(_table,x)
3036 004d c75005 ld _PB_ODR,a
3037 ; 44 PC_ODR =k*2; //依次选择第1到第8个数码管
3039 0050 7b03 ld a,(OFST+0,sp)
3040 0052 48 sll a
3041 0053 c7500a ld _PC_ODR,a
3042 ; 45 delay(2);
3044 0056 ae0002 ldw x,#2
3045 0059 ada5 call _delay
3047 ; 41 for(k=0;k<8;k++) //8个数码管
3049 005b 0c03 inc (OFST+0,sp)
3052 005d 7b03 ld a,(OFST+0,sp)
3053 005f a108 cp a,#8
3054 0061 25e4 jrult L3012
3055 ; 39 for(j=0;j<62;j++) //每个数扫描62次
3057 0063 0c01 inc (OFST-2,sp)
3060 0065 7b01 ld a,(OFST-2,sp)
3061 0067 a13e cp a,#62
3062 0069 25da jrult L5702
3063 ; 37 for(i=0;i<16;i++) //有十六个数要显示
3065 006b 0c02 inc (OFST-1,sp)
3068 006d 7b02 ld a,(OFST-1,sp)
3069 006f a110 cp a,#16
3070 0071 25d0 jrult L7602
3072 0073 20cc jra L3602
3097 xdef _main
3098 xdef _init
3099 xdef _delay
3100 xdef _table
3119 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -