📄 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
2794 0010 _table1:
2795 0010 7777772e6764 dc.b "www.gdutelc.cn ",0
2844 ; 8 void delay(uint s)
2844 ; 9 {
2846 switch .text
2847 0000 _delay:
2849 0000 89 pushw x
2850 0001 88 push a
2851 00000001 OFST: set 1
2854 ; 11 for(s;s>0;s--)
2857 0002 2011 jra L3102
2858 0004 L7002:
2859 ; 12 for(i=0;i<250;i++);
2861 0004 0f01 clr (OFST+0,sp)
2862 0006 L7102:
2866 0006 0c01 inc (OFST+0,sp)
2869 0008 7b01 ld a,(OFST+0,sp)
2870 000a a1fa cp a,#250
2871 000c 25f8 jrult L7102
2872 ; 11 for(s;s>0;s--)
2874 000e 1e02 ldw x,(OFST+1,sp)
2875 0010 1d0001 subw x,#1
2876 0013 1f02 ldw (OFST+1,sp),x
2877 0015 L3102:
2880 0015 1e02 ldw x,(OFST+1,sp)
2881 0017 26eb jrne L7002
2882 ; 13 }
2885 0019 5b03 addw sp,#3
2886 001b 81 ret
2918 ; 15 void init_IO(void)
2918 ; 16 {
2919 switch .text
2920 001c _init_IO:
2924 ; 17 PB_DDR=0XFF;
2926 001c 35ff5007 mov _PB_DDR,#255
2927 ; 18 PB_CR1=0XFF;
2929 0020 35ff5008 mov _PB_CR1,#255
2930 ; 19 PB_CR2=0X00;
2932 0024 725f5009 clr _PB_CR2
2933 ; 21 PC_DDR=0XFF;
2935 0028 35ff500c mov _PC_DDR,#255
2936 ; 22 PC_CR1=0XFF;
2938 002c 35ff500d mov _PC_CR1,#255
2939 ; 23 PC_CR2=0X00;
2941 0030 725f500e clr _PC_CR2
2942 ; 25 PD_DDR=0x40;
2944 0034 35405011 mov _PD_DDR,#64
2945 ; 26 PD_CR1=0x20;
2947 0038 35205012 mov _PD_CR1,#32
2948 ; 27 PD_CR2=0x00;
2950 003c 725f5013 clr _PD_CR2
2951 ; 28 }
2954 0040 81 ret
2984 ; 30 void init_TIM2(void)
2984 ; 31 {
2985 switch .text
2986 0041 _init_TIM2:
2990 ; 32 TIM2_EGR=0X01; //允许产生更新事件
2992 0041 35015304 mov _TIM2_EGR,#1
2993 ; 33 TIM2_PSCR=0X01; //分频,使频率为1MHz
2995 0045 3501530c mov _TIM2_PSCR,#1
2996 ; 35 TIM2_ARRH=0XC3; //更新后计数器的值
2998 0049 35c3530d mov _TIM2_ARRH,#195
2999 ; 36 TIM2_ARRL=0X50;
3001 004d 3550530e mov _TIM2_ARRL,#80
3002 ; 38 TIM2_CR1=0X05; //允许定时器工作
3004 0051 35055300 mov _TIM2_CR1,#5
3005 ; 39 TIM2_IER=0X01; //允许更新中断
3007 0055 35015301 mov _TIM2_IER,#1
3008 ; 40 _asm("rim"); //汇编语句,启动定时器
3011 0059 9a rim
3013 ; 41 }
3016 005a 81 ret
3042 ; 43 void init_UART(void)
3042 ; 44 {
3043 switch .text
3044 005b _init_UART:
3048 ; 45 UART2_BRR2 = 0x00; // 例如对于波特率位9600时,分频系数=2000000/9600=208
3050 005b 725f5243 clr _UART2_BRR2
3051 ; 46 UART2_BRR1 = 0x0d; // 对应的十六进制数为00D0,BBR1=0D,BBR2=00
3053 005f 350d5242 mov _UART2_BRR1,#13
3054 ; 47 UART2_CR2 = 0x2C; // b3 = 1,允许发送 b2 = 1,允许接收 b5 = 1,允许产生接收中断
3056 0063 352c5245 mov _UART2_CR2,#44
3057 ; 49 }
3060 0067 81 ret
3097 ; 51 void transmit(uchar *s)
3097 ; 52 {
3098 switch .text
3099 0068 _transmit:
3101 0068 89 pushw x
3102 00000000 OFST: set 0
3105 0069 2015 jra L5702
3106 006b L3012:
3107 ; 55 while((UART2_SR&0x40)==0); //等待数据发送完成
3109 006b c65240 ld a,_UART2_SR
3110 006e a540 bcp a,#64
3111 0070 27f9 jreq L3012
3112 ; 56 UART2_DR=(*s++); //发送指针所指字符
3114 0072 1e01 ldw x,(OFST+1,sp)
3115 0074 1c0001 addw x,#1
3116 0077 1f01 ldw (OFST+1,sp),x
3117 0079 1d0001 subw x,#1
3118 007c f6 ld a,(x)
3119 007d c75241 ld _UART2_DR,a
3120 0080 L5702:
3121 ; 53 while(*s>0)
3123 0080 1e01 ldw x,(OFST+1,sp)
3124 0082 7d tnz (x)
3125 0083 26e6 jrne L3012
3126 ; 58 }
3129 0085 85 popw x
3130 0086 81 ret
3160 ; 60 void display(void)
3160 ; 61 {
3161 switch .text
3162 0087 _display:
3166 ; 62 H=a/16;
3168 0087 b604 ld a,_a
3169 0089 4e swap a
3170 008a a40f and a,#15
3171 008c b701 ld _H,a
3172 ; 63 L=a%16;
3174 008e b604 ld a,_a
3175 0090 a40f and a,#15
3176 0092 b700 ld _L,a
3177 ; 65 PC_ODR=0x02;
3179 0094 3502500a mov _PC_ODR,#2
3180 ; 66 PB_ODR=table[H];
3182 0098 b601 ld a,_H
3183 009a 5f clrw x
3184 009b 97 ld xl,a
3185 009c e600 ld a,(_table,x)
3186 009e c75005 ld _PB_ODR,a
3187 ; 67 delay(5);
3189 00a1 ae0005 ldw x,#5
3190 00a4 cd0000 call _delay
3192 ; 69 PC_ODR=0x00;
3194 00a7 725f500a clr _PC_ODR
3195 ; 70 PB_ODR=table[L];
3197 00ab b600 ld a,_L
3198 00ad 5f clrw x
3199 00ae 97 ld xl,a
3200 00af e600 ld a,(_table,x)
3201 00b1 c75005 ld _PB_ODR,a
3202 ; 71 delay(5);
3204 00b4 ae0005 ldw x,#5
3205 00b7 cd0000 call _delay
3207 ; 72 }
3210 00ba 81 ret
3240 ; 74 void main()
3240 ; 75 {
3241 switch .text
3242 00bb _main:
3246 ; 76 init_IO();
3248 00bb cd001c call _init_IO
3250 ; 77 init_UART();
3252 00be ad9b call _init_UART
3254 ; 78 init_TIM2();
3256 00c0 cd0041 call _init_TIM2
3258 00c3 L7212:
3259 ; 82 if(t>100)
3261 00c3 b603 ld a,_t
3262 00c5 a165 cp a,#101
3263 00c7 2507 jrult L3312
3264 ; 84 t=0;
3266 00c9 3f03 clr _t
3267 ; 85 transmit(table1);
3269 00cb ae0010 ldw x,#_table1
3270 00ce ad98 call _transmit
3272 00d0 L3312:
3273 ; 87 display();
3275 00d0 adb5 call _display
3278 00d2 20ef jra L7212
3304 ; 91 @far @interrupt void UART2_Receiver(void)
3304 ; 92 {
3306 switch .text
3307 00d4 f_UART2_Receiver:
3311 00d4 L7412:
3312 ; 93 while((UART2_SR & 0x80) == 0x00); // 等待数据转移到移位寄存器
3314 00d4 c65240 ld a,_UART2_SR
3315 00d7 a580 bcp a,#128
3316 00d9 27f9 jreq L7412
3317 ; 94 a=UART2_DR; // 将接收到的字符放到a中
3319 00db 5552410004 mov _a,_UART2_DR
3320 ; 95 }
3323 00e0 80 iret
3347 ; 98 @far @interrupt void TIM2_UP_IRQHandler (void)
3347 ; 99
3347 ; 100 {
3348 switch .text
3349 00e1 f_TIM2_UP_IRQHandler:
3353 ; 101 TIM2_SR1 = 0x00;
3355 00e1 725f5302 clr _TIM2_SR1
3356 ; 102 t++;
3358 00e5 3c03 inc _t
3359 ; 103 }
3362 00e7 80 iret
3441 xdef f_TIM2_UP_IRQHandler
3442 xdef f_UART2_Receiver
3443 xdef _main
3444 xdef _display
3445 xdef _transmit
3446 xdef _init_UART
3447 xdef _init_TIM2
3448 xdef _init_IO
3449 xdef _delay
3450 switch .ubsct
3451 0000 _L:
3452 0000 00 ds.b 1
3453 xdef _L
3454 0001 _H:
3455 0001 00 ds.b 1
3456 xdef _H
3457 0002 _n:
3458 0002 00 ds.b 1
3459 xdef _n
3460 0003 _t:
3461 0003 00 ds.b 1
3462 xdef _t
3463 0004 _a:
3464 0004 00 ds.b 1
3465 xdef _a
3466 xdef _table1
3467 xdef _table
3487 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -