当前位置: 代码迷 >> 汇编语言 >> 怎么更改,刚刚自学单片机
  详细解决方案

怎么更改,刚刚自学单片机

热度:2790   发布时间:2013-02-26 00:00:00.0
如何更改,刚刚自学单片机
原代码:
DBUF0 EQU 30H ;置存储区首址
TEMP EQU 40H ;置存储区首址
DIN BIT 0B0H ;置串行输出口
CLK BIT 0B1H ;置时钟输出口
ORG 00H  
MOV 30H,#1H ;存入显示数据
  MOV 31H,#5H
DISP: MOV R0,#DBUF0
MOV R1,#TEMP
  MOV R2,#2
DP10: MOV DPTR,#SEGTAB ;表头地址
MOV A,@R0
MOVC A,@A+DPTR ;查表指令
MOV @R1,A
INC R1
  INC R0
DJNZ R2,DP10
MOV R0,#TEMP ;段码地址指针
MOV R1,#2 ;段码字节数
DP12: MOV R2,#8 ;输出子程序
MOV A,@R0 ;取段码
DP13: RLC A ;段码左移
MOV DIN,C ;输出一位段码
CLR CLK ;发送位移脉冲一位
SETB CLK
DJNZ R2,DP13
INC R0
DJNZ R1,DP12
SJMP $
SEGTAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4
DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9
DELAY: MOV R4,#03H ;延时子程序
AA1: MOV R5,#0FFH
AA: DJNZ R5,AA
DJNZ R4,AA1
RET
END
用C语言改写:下面是自己改写的,或者说是硬翻译
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>

#define uint unsigned int
#define uchar unsigned char

#define DBUF0 XBYTE [0x30]
#define TEMP XBYTE [0x40]
#define DIN XBYTE [0xb0]
#define CLK XBYTE [0xb1]


void delayms(uint x)
{
  uchar i;

while(x--)
{
for(i=120;i>0;i--);
}
}

void main()
{
uint m;
uint n;
uint i;
uint j;
uint A;

uint sz[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

m = 0x01;
n = 0x05;

for (i = 0;i < 2;i++)
{
A = DBUF0;

A = sz[i];

TEMP = A;
}

DBUF0 = TEMP;

for (i = 0;i< 2;i++)
{
A = DBUF0;

for (j = 0;j < 8;j++)
{

}
}

while(1);
}
但是关于如何使用串行不会了,看书也没看太懂!

------解决方案--------------------------------------------------------
你用什么芯片,有xdata吗?XBYTE不是随便可用的。
  相关解决方案