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

📄 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
2776                     	bsct
2777  0000               _table:
2778  0000 c0            	dc.b	192
2779  0001 f9            	dc.b	249
2780  0002 a4            	dc.b	164
2781  0003 b0            	dc.b	176
2782  0004 99            	dc.b	153
2783  0005 92            	dc.b	146
2784  0006 82            	dc.b	130
2785  0007 f8            	dc.b	248
2786  0008 80            	dc.b	128
2787  0009 90            	dc.b	144
2788  000a 88            	dc.b	136
2789  000b 83            	dc.b	131
2790  000c c6            	dc.b	198
2791  000d a1            	dc.b	161
2792  000e 86            	dc.b	134
2793  000f 8e            	dc.b	142
2794  0010               _table1:
2795  0010 7777772e6764  	dc.b	"www.gdutelc.cn    ",0
2844                     ; 8 void delay(uint s)
2844                     ; 9 {
2846                     	switch	.text
2847  0000               _delay:
2849  0000 89            	pushw	x
2850  0001 88            	push	a
2851       00000001      OFST:	set	1
2854                     ; 11  for(s;s>0;s--)
2857  0002 2011          	jra	L3102
2858  0004               L7002:
2859                     ; 12    for(i=0;i<250;i++);
2861  0004 0f01          	clr	(OFST+0,sp)
2862  0006               L7102:
2866  0006 0c01          	inc	(OFST+0,sp)
2869  0008 7b01          	ld	a,(OFST+0,sp)
2870  000a a1fa          	cp	a,#250
2871  000c 25f8          	jrult	L7102
2872                     ; 11  for(s;s>0;s--)
2874  000e 1e02          	ldw	x,(OFST+1,sp)
2875  0010 1d0001        	subw	x,#1
2876  0013 1f02          	ldw	(OFST+1,sp),x
2877  0015               L3102:
2880  0015 1e02          	ldw	x,(OFST+1,sp)
2881  0017 26eb          	jrne	L7002
2882                     ; 13 }
2885  0019 5b03          	addw	sp,#3
2886  001b 81            	ret
2918                     ; 15 void init_IO(void)
2918                     ; 16 {
2919                     	switch	.text
2920  001c               _init_IO:
2924                     ; 17     PB_DDR=0XFF;
2926  001c 35ff5007      	mov	_PB_DDR,#255
2927                     ; 18     PB_CR1=0XFF;
2929  0020 35ff5008      	mov	_PB_CR1,#255
2930                     ; 19     PB_CR2=0X00;
2932  0024 725f5009      	clr	_PB_CR2
2933                     ; 21     PC_DDR=0XFF;
2935  0028 35ff500c      	mov	_PC_DDR,#255
2936                     ; 22     PC_CR1=0XFF;
2938  002c 35ff500d      	mov	_PC_CR1,#255
2939                     ; 23     PC_CR2=0X00;
2941  0030 725f500e      	clr	_PC_CR2
2942                     ; 25 		PD_DDR=0x40;
2944  0034 35405011      	mov	_PD_DDR,#64
2945                     ; 26 		PD_CR1=0x20;
2947  0038 35205012      	mov	_PD_CR1,#32
2948                     ; 27 		PD_CR2=0x00;   
2950  003c 725f5013      	clr	_PD_CR2
2951                     ; 28 }
2954  0040 81            	ret
2984                     ; 30 void init_TIM2(void)
2984                     ; 31 {
2985                     	switch	.text
2986  0041               _init_TIM2:
2990                     ; 32     TIM2_EGR=0X01;       //允许产生更新事件
2992  0041 35015304      	mov	_TIM2_EGR,#1
2993                     ; 33     TIM2_PSCR=0X01;     //分频,使频率为1MHz
2995  0045 3501530c      	mov	_TIM2_PSCR,#1
2996                     ; 35     TIM2_ARRH=0XC3;     //更新后计数器的值
2998  0049 35c3530d      	mov	_TIM2_ARRH,#195
2999                     ; 36     TIM2_ARRL=0X50;
3001  004d 3550530e      	mov	_TIM2_ARRL,#80
3002                     ; 38     TIM2_CR1=0X05;      //允许定时器工作
3004  0051 35055300      	mov	_TIM2_CR1,#5
3005                     ; 39     TIM2_IER=0X01;     //允许更新中断
3007  0055 35015301      	mov	_TIM2_IER,#1
3008                     ; 40 		_asm("rim");       //汇编语句,启动定时器	
3011  0059 9a            rim
3013                     ; 41 }
3016  005a 81            	ret
3042                     ; 43 void init_UART(void)
3042                     ; 44 {
3043                     	switch	.text
3044  005b               _init_UART:
3048                     ; 45 	UART2_BRR2 = 0x00;         // 例如对于波特率位9600时,分频系数=2000000/9600=208
3050  005b 725f5243      	clr	_UART2_BRR2
3051                     ; 46 	UART2_BRR1 = 0x0d;				// 对应的十六进制数为00D0,BBR1=0D,BBR2=00
3053  005f 350d5242      	mov	_UART2_BRR1,#13
3054                     ; 47   UART2_CR2 = 0x2C;        // b3 = 1,允许发送    b2 = 1,允许接收    b5 = 1,允许产生接收中断 
3056  0063 352c5245      	mov	_UART2_CR2,#44
3057                     ; 49 }
3060  0067 81            	ret
3097                     ; 51 void transmit(uchar *s)
3097                     ; 52 {
3098                     	switch	.text
3099  0068               _transmit:
3101  0068 89            	pushw	x
3102       00000000      OFST:	set	0
3105  0069 2015          	jra	L5702
3106  006b               L3012:
3107                     ; 55 		while((UART2_SR&0x40)==0);    //等待数据发送完成
3109  006b c65240        	ld	a,_UART2_SR
3110  006e a540          	bcp	a,#64
3111  0070 27f9          	jreq	L3012
3112                     ; 56 		UART2_DR=(*s++);              //发送指针所指字符
3114  0072 1e01          	ldw	x,(OFST+1,sp)
3115  0074 1c0001        	addw	x,#1
3116  0077 1f01          	ldw	(OFST+1,sp),x
3117  0079 1d0001        	subw	x,#1
3118  007c f6            	ld	a,(x)
3119  007d c75241        	ld	_UART2_DR,a
3120  0080               L5702:
3121                     ; 53 	while(*s>0)
3123  0080 1e01          	ldw	x,(OFST+1,sp)
3124  0082 7d            	tnz	(x)
3125  0083 26e6          	jrne	L3012
3126                     ; 58 }
3129  0085 85            	popw	x
3130  0086 81            	ret
3160                     ; 60 void display(void)
3160                     ; 61 {
3161                     	switch	.text
3162  0087               _display:
3166                     ; 62 	H=a/16;
3168  0087 b604          	ld	a,_a
3169  0089 4e            	swap	a
3170  008a a40f          	and	a,#15
3171  008c b701          	ld	_H,a
3172                     ; 63 	L=a%16; 
3174  008e b604          	ld	a,_a
3175  0090 a40f          	and	a,#15
3176  0092 b700          	ld	_L,a
3177                     ; 65 	PC_ODR=0x02;	
3179  0094 3502500a      	mov	_PC_ODR,#2
3180                     ; 66 	PB_ODR=table[H];	
3182  0098 b601          	ld	a,_H
3183  009a 5f            	clrw	x
3184  009b 97            	ld	xl,a
3185  009c e600          	ld	a,(_table,x)
3186  009e c75005        	ld	_PB_ODR,a
3187                     ; 67 	delay(5);
3189  00a1 ae0005        	ldw	x,#5
3190  00a4 cd0000        	call	_delay
3192                     ; 69 	PC_ODR=0x00;
3194  00a7 725f500a      	clr	_PC_ODR
3195                     ; 70 	PB_ODR=table[L];
3197  00ab b600          	ld	a,_L
3198  00ad 5f            	clrw	x
3199  00ae 97            	ld	xl,a
3200  00af e600          	ld	a,(_table,x)
3201  00b1 c75005        	ld	_PB_ODR,a
3202                     ; 71 	delay(5);
3204  00b4 ae0005        	ldw	x,#5
3205  00b7 cd0000        	call	_delay
3207                     ; 72 }
3210  00ba 81            	ret
3240                     ; 74 void main()
3240                     ; 75 {
3241                     	switch	.text
3242  00bb               _main:
3246                     ; 76 	init_IO();
3248  00bb cd001c        	call	_init_IO
3250                     ; 77 	init_UART();
3252  00be ad9b          	call	_init_UART
3254                     ; 78 	init_TIM2();
3256  00c0 cd0041        	call	_init_TIM2
3258  00c3               L7212:
3259                     ; 82 	  if(t>100)
3261  00c3 b603          	ld	a,_t
3262  00c5 a165          	cp	a,#101
3263  00c7 2507          	jrult	L3312
3264                     ; 84 		  t=0;
3266  00c9 3f03          	clr	_t
3267                     ; 85 			transmit(table1);
3269  00cb ae0010        	ldw	x,#_table1
3270  00ce ad98          	call	_transmit
3272  00d0               L3312:
3273                     ; 87 		display();
3275  00d0 adb5          	call	_display
3278  00d2 20ef          	jra	L7212
3304                     ; 91  @far @interrupt void UART2_Receiver(void)
3304                     ; 92 {
3306                     	switch	.text
3307  00d4               f_UART2_Receiver:
3311  00d4               L7412:
3312                     ; 93   while((UART2_SR & 0x80) == 0x00);    // 等待数据转移到移位寄存器
3314  00d4 c65240        	ld	a,_UART2_SR
3315  00d7 a580          	bcp	a,#128
3316  00d9 27f9          	jreq	L7412
3317                     ; 94   a=UART2_DR;                         // 将接收到的字符放到a中
3319  00db 5552410004    	mov	_a,_UART2_DR
3320                     ; 95 }
3323  00e0 80            	iret
3347                     ; 98 @far @interrupt void TIM2_UP_IRQHandler (void)         
3347                     ; 99 
3347                     ; 100 {
3348                     	switch	.text
3349  00e1               f_TIM2_UP_IRQHandler:
3353                     ; 101    TIM2_SR1 = 0x00; 
3355  00e1 725f5302      	clr	_TIM2_SR1
3356                     ; 102      t++;
3358  00e5 3c03          	inc	_t
3359                     ; 103 }
3362  00e7 80            	iret
3441                     	xdef	f_TIM2_UP_IRQHandler
3442                     	xdef	f_UART2_Receiver
3443                     	xdef	_main
3444                     	xdef	_display
3445                     	xdef	_transmit
3446                     	xdef	_init_UART
3447                     	xdef	_init_TIM2
3448                     	xdef	_init_IO
3449                     	xdef	_delay
3450                     	switch	.ubsct
3451  0000               _L:
3452  0000 00            	ds.b	1
3453                     	xdef	_L
3454  0001               _H:
3455  0001 00            	ds.b	1
3456                     	xdef	_H
3457  0002               _n:
3458  0002 00            	ds.b	1
3459                     	xdef	_n
3460  0003               _t:
3461  0003 00            	ds.b	1
3462                     	xdef	_t
3463  0004               _a:
3464  0004 00            	ds.b	1
3465                     	xdef	_a
3466                     	xdef	_table1
3467                     	xdef	_table
3487                     	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -