⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.ls

📁 STM8S105S4程序
💻 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 + -