?? 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 _a:
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 bf dc.b 191
2799 000b 7f dc.b 127
2800 000c _table0:
2801 000c 546865207465 dc.b "The temperature",0
2802 001c _table1:
2803 001c 69733a00 dc.b "is:",0
2842 ; 32 void init_stm8(void)
2842 ; 33 {
2844 switch .text
2845 0000 _init_stm8:
2849 ; 34 PA_DDR=0x70;
2851 0000 35705002 mov _PA_DDR,#112
2852 ; 35 PA_CR1=0x70;
2854 0004 35705003 mov _PA_CR1,#112
2855 ; 36 PA_CR2=0x00;
2857 0008 725f5004 clr _PA_CR2
2858 ; 38 PB_DDR=0xff;
2860 000c 35ff5007 mov _PB_DDR,#255
2861 ; 39 PB_CR1=0xff;
2863 0010 35ff5008 mov _PB_CR1,#255
2864 ; 40 PB_CR2=0x00;
2866 0014 725f5009 clr _PB_CR2
2867 ; 46 CLK_SWR = 0xE1;
2869 0018 35e150c4 mov _CLK_SWR,#225
2870 ; 47 CLK_CKDIVR = 0x19; //頻率設為1MHz
2872 001c 351950c6 mov _CLK_CKDIVR,#25
2873 ; 48 }
2876 0020 81 ret
2915 ; 51 void write_com(uchar com)
2915 ; 52 {
2916 switch .text
2917 0021 _write_com:
2921 ; 53 RS=0;
2923 0021 72195000 bres _RS
2924 ; 54 RW=0;
2926 0025 721b5000 bres _RW
2927 ; 55 PB_ODR=com;
2929 0029 c75005 ld _PB_ODR,a
2930 ; 56 delay_1ms(5);
2932 002c ae0005 ldw x,#5
2933 002f cd00d1 call _delay_1ms
2935 ; 57 E=1;
2937 0032 721c5000 bset _E
2938 ; 58 E=0;
2940 0036 721d5000 bres _E
2941 ; 59 }
2944 003a 81 ret
2983 ; 61 void write_data(uchar date)
2983 ; 62 {
2984 switch .text
2985 003b _write_data:
2989 ; 63 RS=1;
2991 003b 72185000 bset _RS
2992 ; 64 RW=0;
2994 003f 721b5000 bres _RW
2995 ; 65 PB_ODR=date;
2997 0043 c75005 ld _PB_ODR,a
2998 ; 66 delay_1ms(5);
3000 0046 ae0005 ldw x,#5
3001 0049 cd00d1 call _delay_1ms
3003 ; 67 E=1;
3005 004c 721c5000 bset _E
3006 ; 68 E=0;
3008 0050 721d5000 bres _E
3009 ; 69 }
3012 0054 81 ret
3036 ; 71 void init(void)
3036 ; 72 {
3037 switch .text
3038 0055 _init:
3042 ; 73 write_com(0x38);
3044 0055 a638 ld a,#56
3045 0057 adc8 call _write_com
3047 ; 74 write_com(0x0c);
3049 0059 a60c ld a,#12
3050 005b adc4 call _write_com
3052 ; 75 write_com(0x06);
3054 005d a606 ld a,#6
3055 005f adc0 call _write_com
3057 ; 76 write_com(0x01);
3059 0061 a601 ld a,#1
3060 0063 adbc call _write_com
3062 ; 77 write_com(0x80+0x00);
3064 0065 a680 ld a,#128
3065 0067 adb8 call _write_com
3067 ; 78 }
3070 0069 81 ret
3107 ; 80 void display(uchar *s)
3107 ; 81 {
3108 switch .text
3109 006a _display:
3111 006a 89 pushw x
3112 00000000 OFST: set 0
3115 006b 2012 jra L1602
3116 006d L7502:
3117 ; 84 write_data(*s++);
3119 006d 1e01 ldw x,(OFST+1,sp)
3120 006f 1c0001 addw x,#1
3121 0072 1f01 ldw (OFST+1,sp),x
3122 0074 1d0001 subw x,#1
3123 0077 f6 ld a,(x)
3124 0078 adc1 call _write_data
3126 ; 85 delay_1ms(90);
3128 007a ae005a ldw x,#90
3129 007d ad52 call _delay_1ms
3131 007f L1602:
3132 ; 82 while(*s>0)
3134 007f 1e01 ldw x,(OFST+1,sp)
3135 0081 7d tnz (x)
3136 0082 26e9 jrne L7502
3137 ; 87 }
3140 0084 85 popw x
3141 0085 81 ret
3177 ; 89 void main()
3177 ; 90 {
3178 switch .text
3179 0086 _main:
3183 ; 91 init_stm8();
3185 0086 cd0000 call _init_stm8
3187 ; 92 init(); //初始化1602
3189 0089 adca call _init
3191 ; 93 init_Ds18B20(); //初始化18B20
3193 008b ad64 call _init_Ds18B20
3195 ; 94 write_byte(0xcc);
3197 008d a6cc ld a,#204
3198 008f cd011c call _write_byte
3200 ; 95 write_byte(0x44);
3202 0092 a644 ld a,#68
3203 0094 cd011c call _write_byte
3205 ; 96 delay(300);
3207 0097 a62c ld a,#44
3208 0099 ad2c call _delay
3210 ; 97 display(table0);
3212 009b ae000c ldw x,#_table0
3213 009e adca call _display
3215 ; 98 write_com(0x80+0x40+0x02);
3217 00a0 a6c2 ld a,#194
3218 00a2 cd0021 call _write_com
3220 ; 99 display(table1); //以上語句為顯示字符"The temperature is:"
3222 00a5 ae001c ldw x,#_table1
3223 00a8 adc0 call _display
3225 00aa L5702:
3226 ; 102 readtemperature(); //讀溫度數據
3228 00aa cd01b0 call _readtemperature
3230 ; 103 write_com(0x80+0x40+0x05); //把1602地址指針指向第二行第6列
3232 00ad a6c5 ld a,#197
3233 00af cd0021 call _write_com
3235 ; 104 for(i=0;i<8;i++) //顯示溫度數據,包括一個正負溫度符號位,一個小數點,四個數據,還有兩位顯示℃
3237 00b2 3f00 clr _i
3238 00b4 L1012:
3239 ; 106 write_data(table2[i]);
3241 00b4 b600 ld a,_i
3242 00b6 5f clrw x
3243 00b7 97 ld xl,a
3244 00b8 e601 ld a,(_table2,x)
3245 00ba cd003b call _write_data
3247 ; 104 for(i=0;i<8;i++) //顯示溫度數據,包括一個正負溫度符號位,一個小數點,四個數據,還有兩位顯示℃
3249 00bd 3c00 inc _i
3252 00bf b600 ld a,_i
3253 00c1 a108 cp a,#8
3254 00c3 25ef jrult L1012
3256 00c5 20e3 jra L5702
3290 ; 111 void delay(uchar t)
3290 ; 112 {
3291 switch .text
3292 00c7 _delay:
3294 00c7 88 push a
3295 00000000 OFST: set 0
3298 00c8 L7212:
3299 ; 113 while(t--);
3301 00c8 7b01 ld a,(OFST+1,sp)
3302 00ca 0a01 dec (OFST+1,sp)
3303 00cc 4d tnz a
3304 00cd 26f9 jrne L7212
3305 ; 114 }
3308 00cf 84 pop a
3309 00d0 81 ret
3352 ; 116 void delay_1ms(uint a)
3352 ; 117 {
3353 switch .text
3354 00d1 _delay_1ms:
3356 00d1 89 pushw x
3357 00d2 88 push a
3358 00000001 OFST: set 1
3361 00d3 200a jra L7512
3362 00d5 L5512:
3363 ; 120 for(i=0;i<120;i++);
3365 00d5 0f01 clr (OFST+0,sp)
3366 00d7 L3612:
3370 00d7 0c01 inc (OFST+0,sp)
3373 00d9 7b01 ld a,(OFST+0,sp)
3374 00db a178 cp a,#120
3375 00dd 25f8 jrult L3612
3376 00df L7512:
3377 ; 119 while(a--)
3379 00df 1e02 ldw x,(OFST+1,sp)
3380 00e1 1d0001 subw x,#1
3381 00e4 1f02 ldw (OFST+1,sp),x
3382 00e6 1c0001 addw x,#1
3383 00e9 a30000 cpw x,#0
3384 00ec 26e7 jrne L5512
3385 ; 121 }
3388 00ee 5b03 addw sp,#3
3389 00f0 81 ret
3428 ; 123 void init_Ds18B20(void)
3428 ; 124 {
3429 switch .text
3430 00f1 _init_Ds18B20:
3432 00f1 88 push a
3433 00000001 OFST: set 1
3436 ; 127 PG_DDR=0x02;
3438 00f2 35025020 mov _PG_DDR,#2
3439 ; 128 PG_CR1=0x02; //設置IO口為推挽輸出模式
3441 00f6 35025021 mov _PG_CR1,#2
3442 ; 129 PG_CR2=0x00;
3444 00fa 725f5022 clr _PG_CR2
3445 ; 131 DQ=1;
3447 00fe 7212501e bset _DQ
3448 ; 132 delay(2);
3450 0102 a602 ld a,#2
3451 0104 adc1 call _delay
3453 ; 133 DQ=0;
3455 0106 7213501e bres _DQ
3456 ; 134 delay(200);
3458 010a a6c8 ld a,#200
3459 010c adb9 call _delay
3461 ; 135 DQ=1;
3463 010e 7212501e bset _DQ
3464 ; 136 delay(50);
3466 0112 a632 ld a,#50
3467 0114 adb1 call _delay
3469 ; 137 n=DQ;
3471 ; 138 delay(100); //以上語句為檢查是否存在18B20,若n=0說明 18B20存在
3473 0116 a664 ld a,#100
3474 0118 adad call _delay
3476 ; 139 }
3479 011a 84 pop a
3480 011b 81 ret
3529 ; 141 void write_byte(uchar date)
3529 ; 142 {
3530 switch .text
3531 011c _write_byte:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -