+ -
当前位置:首页 → 问答吧 → 笨人求汇编

笨人求汇编

时间:2010-12-24

来源:互联网

谢谢各位大哥了,只是因为小菜的C完全不懂的原因
而本人在之前已将其它仪器上收取的数据放在了34H及35H中,相将这两个数由并口中发送出去
再谢
程序硬件平台:11.0592M晶振 stc51单片机

/***************************************************************
* 在单片机上模拟了一个串口,使用P2.1作为发送端
* 把单片机中存放的数据通过P2.1作为串口TXD发送出去
***************************************************************/
#include <reg51.h>
#include <stdio.h>
#include <string.h>

typedef unsigned char uchar;

int i;

uchar code info[] = 
{
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55
};

sbit newTXD = P2^1;//模拟串口的发送端设为P2.1

void UartInit()
{
  SCON = 0x50; // SCON: serail mode 1, 8-bit UART
  TMOD |= 0x21; // T0工作在方式1,十六位定时
  PCON |= 0x80; // SMOD=1;
  TH0 = 0xFE; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz
  TL0 = 0x7F; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz

// TH0 = 0xFD; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=18.432MHz
// TL0 = 0x7F; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=18.432MHz
}

void WaitTF0(void)
{
  while(!TF0);
  TF0=0;
  TH0=0xFE; // 定时器重装初值 fosc=11.0592MHz
  TL0=0x7F; // 定时器重装初值 fosc=11.0592MHz

  // TH0 = 0xFD; // 定时器重装初值 fosc=18.432MHz
  // TL0 = 0x7F; // 定时器重装初值 fosc=18.432MHz
}

void WByte(uchar input)
{
  //发送启始位
  uchar j=8;
  TR0=1;
  newTXD=(bit)0;
  WaitTF0();
  //发送8位数据位
  while(j--)
  {
  newTXD=(bit)(input&0x01); //先传低位
  WaitTF0();
  input=input>>1;
  }

  //发送校验位(无)

  //发送结束位
  newTXD=(bit)1;
  WaitTF0();
  TR0=0;
}  

void Sendata()
{
  for(i=0;i<sizeof(info);i++)//外层循环,遍历数组
  {
  WByte(info[i]);
  }
}

void main()
{
  UartInit();
  while(1)
  {
  Sendata();
  }
}

作者: sunsoncheng   发布时间: 2010-12-24

关于寄存器的操作,只要多看看数据手册就好啦。

作者: asmlearn   发布时间: 2010-12-25

热门下载

更多