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

📄 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                     ; 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 + -