?? 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 ; 20 void delay(uint s)
2854 ; 21 {
2856 switch .text
2857 0000 _delay:
2859 0000 89 pushw x
2860 0001 88 push a
2861 00000001 OFST: set 1
2864 ; 23 for(s;s>0;s--)
2867 0002 2011 jra L3102
2868 0004 L7002:
2869 ; 24 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 ; 23 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 ; 25 }
2895 0019 5b03 addw sp,#3
2896 001b 81 ret
2931 ; 27 void init_IO(void)
2931 ; 28 {
2932 switch .text
2933 001c _init_IO:
2937 ; 29 PB_DDR=0XFF;
2939 001c 35ff5007 mov _PB_DDR,#255
2940 ; 30 PB_CR1=0XFF;
2942 0020 35ff5008 mov _PB_CR1,#255
2943 ; 31 PB_CR2=0X00;
2945 0024 725f5009 clr _PB_CR2
2946 ; 33 PC_DDR=0X6f; //MISO,主設備懸空輸入,MOSI主設備推挽輸出,SCL推挽輸出
2948 0028 356f500c mov _PC_DDR,#111
2949 ; 34 PC_CR1=0X6f;
2951 002c 356f500d mov _PC_CR1,#111
2952 ; 35 PC_CR2=0X00;
2954 0030 725f500e clr _PC_CR2
2955 ; 37 PD_DDR=0x40;
2957 0034 35405011 mov _PD_DDR,#64
2958 ; 38 PD_CR1=0x20;
2960 0038 35205012 mov _PD_CR1,#32
2961 ; 39 PD_CR2=0x00;
2963 003c 725f5013 clr _PD_CR2
2964 ; 41 PE_DDR=0x01; //PE0為從設備控制引腳,NSS設為上拉輸入
2966 0040 35015016 mov _PE_DDR,#1
2967 ; 42 PE_CR1=0x21;
2969 0044 35215017 mov _PE_CR1,#33
2970 ; 43 PE_CR2=0x00;
2972 0048 725f5018 clr _PE_CR2
2973 ; 44 }
2976 004c 81 ret
3006 ; 46 void init_TIM2(void)
3006 ; 47 {
3007 switch .text
3008 004d _init_TIM2:
3012 ; 48 TIM2_EGR=0X01; //允許產生更新事件
3014 004d 35015304 mov _TIM2_EGR,#1
3015 ; 49 TIM2_PSCR=0X00; //不分頻,使頻率為2MHz
3017 0051 725f530c clr _TIM2_PSCR
3018 ; 51 TIM2_ARRH=0X27; //更新后計數器的值,定時5ms
3020 0055 3527530d mov _TIM2_ARRH,#39
3021 ; 52 TIM2_ARRL=0X10;
3023 0059 3510530e mov _TIM2_ARRL,#16
3024 ; 54 TIM2_CR1=0X05; //允許定時器工作
3026 005d 35055300 mov _TIM2_CR1,#5
3027 ; 55 TIM2_IER=0X01; //允許更新中斷
3029 0061 35015301 mov _TIM2_IER,#1
3030 ; 56 _asm("rim"); //匯編語句,啟動定時器
3033 0065 9a rim
3035 ; 57 }
3038 0066 81 ret
3064 ; 59 void init_UART(void)
3064 ; 60 {
3065 switch .text
3066 0067 _init_UART:
3070 ; 61 UART2_BRR2 = 0x00; // 波特率9600,分頻系數=2000000/9600=208
3072 0067 725f5243 clr _UART2_BRR2
3073 ; 62 UART2_BRR1 = 0x0d; // 對應的十六進制數為00D0,BBR1=0D,BBR2=00
3075 006b 350d5242 mov _UART2_BRR1,#13
3076 ; 63 UART2_CR2 = 0x2C; // b3 = 1,允許發送 b2 = 1,允許接收 b5 = 1,允許產生接收中斷
3078 006f 352c5245 mov _UART2_CR2,#44
3079 ; 64 }
3082 0073 81 ret
3113 ; 66 void SPI(void)
3113 ; 67 {
3114 switch .text
3115 0074 _SPI:
3119 ; 68 SPI_CR1=0x14; //先發送MSB,關閉SPI,波特率f/4 ,配置為主設備,空閑低電平,第一個時鐘邊緣開始數據采樣
3121 0074 35145200 mov _SPI_CR1,#20
3122 ; 69 SPI_NSS=0; //開啟從設備接收
3124 0078 72115014 bres _SPI_NSS
3125 ; 70 SPI_CR1|=0x40; //開啟SPI
3127 007c 721c5200 bset _SPI_CR1,#6
3128 ; 71 SPI_CR2=0x00; //雙向數據模式
3130 0080 725f5201 clr _SPI_CR2
3131 ; 72 SPI_DR=a; //將要發送的a放到SPI_DR中
3133 0084 5500055204 mov _SPI_DR,_a
3134 ; 73 delay(1); //延時一會等待數據發送完畢
3136 0089 ae0001 ldw x,#1
3137 008c cd0000 call _delay
3140 008f L7602:
3141 ; 74 while((SPI_SR|0x80)==0x80); //等待通信結束
3143 008f c65203 ld a,_SPI_SR
3144 0092 5f clrw x
3145 0093 aa80 or a,#128
3146 0095 02 rlwa x,a
3147 0096 a30080 cpw x,#128
3148 0099 27f4 jreq L7602
3149 ; 75 if((SPI_SR&0x01)==0x01) //判斷接受區是否為空,即判斷是否接收到數據
3151 009b c65203 ld a,_SPI_SR
3152 009e a401 and a,#1
3153 00a0 a101 cp a,#1
3154 00a2 2605 jrne L3702
3155 ; 76 b=SPI_DR; //將接受到從設備發送的數據賦值給b
3157 00a4 5552040003 mov _b,_SPI_DR
3158 00a9 L3702:
3159 ; 77 delay(1); //延時一會等待數據賦值完成
3161 00a9 ae0001 ldw x,#1
3162 00ac cd0000 call _delay
3165 00af L7702:
3166 ; 78 while((SPI_SR|0x80)==0x80); //等待通信結束
3168 00af c65203 ld a,_SPI_SR
3169 00b2 5f clrw x
3170 00b3 aa80 or a,#128
3171 00b5 02 rlwa x,a
3172 00b6 a30080 cpw x,#128
3173 00b9 27f4 jreq L7702
3174 ; 79 SPI_NSS=1; //關閉從設備接收
3176 00bb 72105014 bset _SPI_NSS
3177 ; 80 SPI_CR1|=0xbf; //關閉SPI
3179 00bf c65200 ld a,_SPI_CR1
3180 00c2 aabf or a,#191
3181 00c4 c75200 ld _SPI_CR1,a
3182 ; 81 delay(1);
3184 00c7 ae0001 ldw x,#1
3185 00ca cd0000 call _delay
3187 ; 82 }
3190 00cd 81 ret
3220 ; 84 void display(void)
3220 ; 85 {
3221 switch .text
3222 00ce _display:
3226 ; 86 H=b/16;
3228 00ce b603 ld a,_b
3229 00d0 4e swap a
3230 00d1 a40f and a,#15
3231 00d3 b701 ld _H,a
3232 ; 87 L=b%16;
3234 00d5 b603 ld a,_b
3235 00d7 a40f and a,#15
3236 00d9 b700 ld _L,a
3237 ; 88 if((t%2)==0)
3239 00db b604 ld a,_t
3240 00dd a501 bcp a,#1
3241 00df 260d jrne L3112
3242 ; 90 PC_ODR=0x02;
3244 00e1 3502500a mov _PC_ODR,#2
3245 ; 91 PB_ODR=table[H];
3247 00e5 b601 ld a,_H
3248 00e7 5f clrw x
3249 00e8 97 ld xl,a
3250 00e9 e600 ld a,(_table,x)
3251 00eb c75005 ld _PB_ODR,a
3252 00ee L3112:
3253 ; 94 if((t%2)!=0)
3255 00ee b604 ld a,_t
3256 00f0 a501 bcp a,#1
3257 00f2 270d jreq L5112
3258 ; 96 PC_ODR=0x00;
3260 00f4 725f500a clr _PC_ODR
3261 ; 97 PB_ODR=table[L];
3263 00f8 b600 ld a,_L
3264 00fa 5f clrw x
3265 00fb 97 ld xl,a
3266 00fc e600 ld a,(_table,x)
3267 00fe c75005 ld _PB_ODR,a
3268 0101 L5112:
3269 ; 99 }
3272 0101 81 ret
3300 ; 101 void main()
3300 ; 102 {
3301 switch .text
3302 0102 _main:
3306 ; 103 init_IO();
3308 0102 cd001c call _init_IO
3310 ; 104 init_UART();
3312 0105 cd0067 call _init_UART
3314 ; 105 init_TIM2();
3316 0108 cd004d call _init_TIM2
3318 010b L7212:
3319 ; 109 SPI();
3321 010b cd0074 call _SPI
3323 ; 110 display();
3325 010e adbe call _display
3328 0110 20f9 jra L7212
3354 ; 114 @far @interrupt void UART2_Receiver(void)
3354 ; 115 {
3356 switch .text
3357 0112 f_UART2_Receiver:
3361 0112 L5412:
3362 ; 116 while((UART2_SR & 0x80) == 0x00); // 等待數據轉移到移位寄存器
3364 0112 c65240 ld a,_UART2_SR
3365 0115 a580 bcp a,#128
3366 0117 27f9 jreq L5412
3367 ; 117 a=UART2_DR; // 將接收到的字符放到a中
3369 0119 5552410005 mov _a,_UART2_DR
3370 ; 118 }
3373 011e 80 iret
3397 ; 121 @far @interrupt void TIM2_UP_IRQHandler (void)
3397 ; 122
3397 ; 123 {
3398 switch .text
3399 011f f_TIM2_UP_IRQHandler:
3403 ; 124 TIM2_SR1 = 0x00;
3405 011f 725f5302 clr _TIM2_SR1
3406 ; 125 t++;
3408 0123 3c04 inc _t
3409 ; 126 }
3412 0125 80 iret
3530 xdef f_TIM2_UP_IRQHandler
3531 xdef f_UART2_Receiver
3532 xdef _main
3533 xdef _display
3534 xdef _SPI
3535 xdef _init_UART
3536 xdef _init_TIM2
3537 xdef _init_IO
3538 xdef _delay
3539 switch .ubsct
3540 0000 _L:
3541 0000 00 ds.b 1
3542 xdef _L
3543 0001 _H:
3544 0001 00 ds.b 1
3545 xdef _H
3546 0002 _n:
3547 0002 00 ds.b 1
3548 xdef _n
3549 0003 _b:
3550 0003 00 ds.b 1
3551 xdef _b
3552 0004 _t:
3553 0004 00 ds.b 1
3554 xdef _t
3555 0005 _a:
3556 0005 00 ds.b 1
3557 xdef _a
3558 xdef _table
3578 end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -