📄 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
2786 bsct
2787 0000 _table:
2788 0000 c0 dc.b 192
2789 0001 f9 dc.b 249
2790 0002 a4 dc.b 164
2791 0003 b0 dc.b 176
2792 0004 99 dc.b 153
2793 0005 92 dc.b 146
2794 0006 82 dc.b 130
2795 0007 f8 dc.b 248
2796 0008 80 dc.b 128
2797 0009 90 dc.b 144
2798 000a 88 dc.b 136
2799 000b 83 dc.b 131
2800 000c c6 dc.b 198
2801 000d a1 dc.b 161
2802 000e 86 dc.b 134
2803 000f 8e dc.b 142
2854 ; 11 void delay(uint s)
2854 ; 12 {
2856 switch .text
2857 0000 _delay:
2859 0000 89 pushw x
2860 0001 88 push a
2861 00000001 OFST: set 1
2864 ; 14 for(s;s>0;s--)
2867 0002 2011 jra L3102
2868 0004 L7002:
2869 ; 15 for(i=0;i<100;i++);
2871 0004 0f01 clr (OFST+0,sp)
2872 0006 L7102:
2876 0006 0c01 inc (OFST+0,sp)
2879 0008 7b01 ld a,(OFST+0,sp)
2880 000a a164 cp a,#100
2881 000c 25f8 jrult L7102
2882 ; 14 for(s;s>0;s--)
2884 000e 1e02 ldw x,(OFST+1,sp)
2885 0010 1d0001 subw x,#1
2886 0013 1f02 ldw (OFST+1,sp),x
2887 0015 L3102:
2890 0015 1e02 ldw x,(OFST+1,sp)
2891 0017 26eb jrne L7002
2892 ; 16 }
2895 0019 5b03 addw sp,#3
2896 001b 81 ret
2931 ; 18 void init_IO(void)
2931 ; 19 {
2932 switch .text
2933 001c _init_IO:
2937 ; 20 PB_DDR=0XFF;
2939 001c 35ff5007 mov _PB_DDR,#255
2940 ; 21 PB_CR1=0XFF;
2942 0020 35ff5008 mov _PB_CR1,#255
2943 ; 22 PB_CR2=0X00;
2945 0024 725f5009 clr _PB_CR2
2946 ; 24 PC_DDR=0X8f; //MISO从设备输出管脚,MOSI从设备 输入
2948 0028 358f500c mov _PC_DDR,#143
2949 ; 25 PC_CR1=0X0f;
2951 002c 350f500d mov _PC_CR1,#15
2952 ; 26 PC_CR2=0X00;
2954 0030 725f500e clr _PC_CR2
2955 ; 28 PD_DDR=0x40;
2957 0034 35405011 mov _PD_DDR,#64
2958 ; 29 PD_CR1=0x20;
2960 0038 35205012 mov _PD_CR1,#32
2961 ; 30 PD_CR2=0x00;
2963 003c 725f5013 clr _PD_CR2
2964 ; 32 PE_DDR=0x00; //将SPI_NSS配置为上拉输入
2966 0040 725f5016 clr _PE_DDR
2967 ; 33 PE_CR1=0x20;
2969 0044 35205017 mov _PE_CR1,#32
2970 ; 34 PE_CR2=0x00;
2972 0048 725f5018 clr _PE_CR2
2973 ; 35 }
2976 004c 81 ret
3006 ; 37 void init_TIM2(void)
3006 ; 38 {
3007 switch .text
3008 004d _init_TIM2:
3012 ; 39 TIM2_EGR=0X01; //允许产生更新事件
3014 004d 35015304 mov _TIM2_EGR,#1
3015 ; 40 TIM2_PSCR=0X01; //分频,使频率为1MHz
3017 0051 3501530c mov _TIM2_PSCR,#1
3018 ; 42 TIM2_ARRH=0X27; //更新后计数器的值
3020 0055 3527530d mov _TIM2_ARRH,#39
3021 ; 43 TIM2_ARRL=0X10;
3023 0059 3510530e mov _TIM2_ARRL,#16
3024 ; 45 TIM2_CR1=0X05; //允许定时器工作
3026 005d 35055300 mov _TIM2_CR1,#5
3027 ; 46 TIM2_IER=0X01; //允许更新中断
3029 0061 35015301 mov _TIM2_IER,#1
3030 ; 47 _asm("rim"); //汇编语句,启动定时器
3033 0065 9a rim
3035 ; 48 }
3038 0066 81 ret
3067 ; 51 void SPI(void)
3067 ; 52 {
3068 switch .text
3069 0067 _SPI:
3073 ; 53 SPI_CR1=0x10;
3075 0067 35105200 mov _SPI_CR1,#16
3076 ; 54 SPI_CR1|=0x40; //先发送MSB,开启SPI,波特率为f/4,配置为从设备,空闲低电平,第一个时钟边缘开始数据采样
3078 006b 721c5200 bset _SPI_CR1,#6
3079 ; 55 SPI_CR2=0x00;
3081 006f 725f5201 clr _SPI_CR2
3082 ; 56 if((SPI_SR&0x01)==0x01)
3084 0073 c65203 ld a,_SPI_SR
3085 0076 a401 and a,#1
3086 0078 a101 cp a,#1
3087 007a 2605 jrne L5502
3088 ; 57 a=SPI_DR;
3090 007c 5552040005 mov _a,_SPI_DR
3091 0081 L5502:
3092 ; 58 delay(1);
3094 0081 ae0001 ldw x,#1
3095 0084 cd0000 call _delay
3098 0087 L1602:
3099 ; 59 while((SPI_SR|0x80)==0x80); //等待通信结束
3101 0087 c65203 ld a,_SPI_SR
3102 008a 5f clrw x
3103 008b aa80 or a,#128
3104 008d 02 rlwa x,a
3105 008e a30080 cpw x,#128
3106 0091 27f4 jreq L1602
3107 ; 61 SPI_DR=a; //将要发送的b放到SPI_DR中
3109 0093 5500055204 mov _SPI_DR,_a
3110 ; 62 delay(3);
3112 0098 ae0003 ldw x,#3
3113 009b cd0000 call _delay
3116 009e L7602:
3117 ; 63 while((SPI_SR|0x80)==0x80); //等待通信结束
3119 009e c65203 ld a,_SPI_SR
3120 00a1 5f clrw x
3121 00a2 aa80 or a,#128
3122 00a4 02 rlwa x,a
3123 00a5 a30080 cpw x,#128
3124 00a8 27f4 jreq L7602
3125 ; 64 delay(1);
3127 00aa ae0001 ldw x,#1
3128 00ad cd0000 call _delay
3130 ; 65 SPI_CR1|=0xbf;
3132 00b0 c65200 ld a,_SPI_CR1
3133 00b3 aabf or a,#191
3134 00b5 c75200 ld _SPI_CR1,a
3135 ; 66 }
3138 00b8 81 ret
3168 ; 68 void display(void)
3168 ; 69 {
3169 switch .text
3170 00b9 _display:
3174 ; 70 H=a/16;
3176 00b9 b605 ld a,_a
3177 00bb 4e swap a
3178 00bc a40f and a,#15
3179 00be b701 ld _H,a
3180 ; 71 L=a%16;
3182 00c0 b605 ld a,_a
3183 00c2 a40f and a,#15
3184 00c4 b700 ld _L,a
3185 ; 72 if((t%2)==0)
3187 00c6 b603 ld a,_t
3188 00c8 a501 bcp a,#1
3189 00ca 260d jrne L3012
3190 ; 74 PC_ODR=0x02;
3192 00cc 3502500a mov _PC_ODR,#2
3193 ; 75 PB_ODR=table[H];
3195 00d0 b601 ld a,_H
3196 00d2 5f clrw x
3197 00d3 97 ld xl,a
3198 00d4 e600 ld a,(_table,x)
3199 00d6 c75005 ld _PB_ODR,a
3200 00d9 L3012:
3201 ; 78 if((t%2)!=0)
3203 00d9 b603 ld a,_t
3204 00db a501 bcp a,#1
3205 00dd 270d jreq L5012
3206 ; 80 PC_ODR=0x00;
3208 00df 725f500a clr _PC_ODR
3209 ; 81 PB_ODR=table[L];
3211 00e3 b600 ld a,_L
3212 00e5 5f clrw x
3213 00e6 97 ld xl,a
3214 00e7 e600 ld a,(_table,x)
3215 00e9 c75005 ld _PB_ODR,a
3216 00ec L5012:
3217 ; 83 }
3220 00ec 81 ret
3247 ; 85 void main()
3247 ; 86 {
3248 switch .text
3249 00ed _main:
3253 ; 87 init_IO();
3255 00ed cd001c call _init_IO
3257 ; 88 init_TIM2();
3259 00f0 cd004d call _init_TIM2
3261 00f3 L7112:
3262 ; 91 SPI();
3264 00f3 cd0067 call _SPI
3266 ; 92 display();
3268 00f6 adc1 call _display
3271 00f8 20f9 jra L7112
3296 ; 96 @far @interrupt void TIM2_UP_IRQHandler (void)
3296 ; 97
3296 ; 98 {
3298 switch .text
3299 00fa f_TIM2_UP_IRQHandler:
3303 ; 99 TIM2_SR1 = 0x00;
3305 00fa 725f5302 clr _TIM2_SR1
3306 ; 100 t++;
3308 00fe 3c03 inc _t
3309 ; 101 }
3312 0100 80 iret
3430 xdef f_TIM2_UP_IRQHandler
3431 xdef _main
3432 xdef _display
3433 xdef _SPI
3434 xdef _init_TIM2
3435 xdef _init_IO
3436 xdef _delay
3437 switch .ubsct
3438 0000 _L:
3439 0000 00 ds.b 1
3440 xdef _L
3441 0001 _H:
3442 0001 00 ds.b 1
3443 xdef _H
3444 0002 _n:
3445 0002 00 ds.b 1
3446 xdef _n
3447 0003 _t:
3448 0003 00 ds.b 1
3449 xdef _t
3450 0004 _b:
3451 0004 00 ds.b 1
3452 xdef _b
3453 0005 _a:
3454 0005 00 ds.b 1
3455 xdef _a
3456 xdef _table
3476 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -