位置:51电子网 » 技术资料 » 单 片 机

单片机C语言编程基础

发布时间:2008/8/16 0:00:00 访问次数:857

  单片机的外部结构:

  1、 dip40双列直插;
  2、 p0,p1,p2,p3四个8位准双向i/o引脚;(作为i/o输入时,要先输出高电平)
  3、 电源vcc(pin40)和地线gnd(pin20);
  4、 高电平复位reset(pin9);(10uf电容接vcc与reset,即可实现上电复位)
  5、 内置振荡电路,外部只要接晶体至x1(pin18)和x0(pin19);(频率为主频的12倍)
  6、 程序配置ea(pin31)接高电平vcc;(运行单片机内部rom中的程序)
  7、 p3支持第二功能:rxd、txd、int0、int1、t0、t1
  单片机内部i/o部件:(所为学习单片机,实际上就是编程控制以下i/o部件,完成指定任务)
  1、 四个8位通用i/o端口,对应引脚p0、p1、p2和p3;
  2、 两个16位定时计数器;(tmod,tcon,tl0,th0,tl1,th1)
  3、 一个串行通信接口;(scon,sbuf)
  4、 一个中断控制器;(ie,ip)
  针对at89c52单片机,头文件at89x52.h给出了sfr特殊功能寄存器所有端口的定义。教科书的160页给出了针对mcs51系列单片机的c语言扩展变量类型。
  单片机c语言编程基础
  1、 十六进制表示字节0x5a:二进制为01011010b;0x6e为01101110。
  2、 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。
  3、 ++var表示对变量var先增一;var—表示对变量后减一。
  4、 x |= 0x0f;表示为 x = x | 0x0f;
  5、 tmod = ( tmod & 0xf0 ) | 0x05;表示给变量tmod的低四位赋值0x5,而不改变tmod的高四位。
  6、 while( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}
  在某引脚输出高电平的编程方法:(比如p1.3(pin4)引脚)
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p1.3
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  p1_3 = 1; //给p1_3赋值1,引脚p1.3就能输出高电平vcc
  while( 1 ); //死循环,相当 loop: goto loop;
  }
  注意:p0的每个引脚要输出高电平时,必须外接上拉电阻(如4k7)至vcc电源。
  在某引脚输出低电平的编程方法:(比如p2.7引脚)
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p2.7
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  p2_7 = 0; //给p2_7赋值0,引脚p2.7就能输出低电平gnd
  while( 1 ); //死循环,相当 loop: goto loop;
  }
  在某引脚输出方波编程方法:(比如p3.1引脚)
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p3.1
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  while( 1 ) //非零表示真,如果为真则执行下面循环体的语句
  {
  p3_1 = 1; //给p3_1赋值1,引脚p3.1就能输出高电平vcc
  p3_1 = 0; //给p3_1赋值0,引脚p3.1就能输出低电平gnd
  } //由于一直为真,所以不断输出高、低、高、低……,从而形成方波
  }
  将某引脚的输入电平取反后,从另一个引脚输出:( 比如 p0.4 = not( p1.1) )
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p0.4和p1.1
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  p1_1 = 1; //初始化。p1.1作为输入,必须输出高电平
  while( 1 ) //非零表示真,如果为真则执行下面循环体的语句
  {
  if( p1_1 == 1 ) //读取p1.1,就是认为p1.1为输入,如果p1.1输入高电平vcc
  { p0_4 = 0; } //给p0_4赋值0,引脚p0.4就能输出低电平gnd
  else //否则p1.1输入为低电平gnd
  //{ p0_4 = 0; } //给p0_4赋值0,引脚p0.4就能输出低电平gnd
  { p0_4 = 1; } //给p0_4赋值1,引脚p0.4就能输出高电平vcc
  } //由于一直为真,所以不断根据p1.1的输入情况,改变p0.4的输出电平
  }
  将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 p2 = not( p3 ) )
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p2和p3
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  p3 = 0xff; //初始化。p3作为输入,必须输出高电平,同时给p3口的8个引脚输出高电平
  while( 1 ) //非零表示真,如果为真则执行下面循环体的语句
  { //取反的方法是异或1,而不取反的方法则是异或0

  单片机的外部结构:

  1、 dip40双列直插;
  2、 p0,p1,p2,p3四个8位准双向i/o引脚;(作为i/o输入时,要先输出高电平)
  3、 电源vcc(pin40)和地线gnd(pin20);
  4、 高电平复位reset(pin9);(10uf电容接vcc与reset,即可实现上电复位)
  5、 内置振荡电路,外部只要接晶体至x1(pin18)和x0(pin19);(频率为主频的12倍)
  6、 程序配置ea(pin31)接高电平vcc;(运行单片机内部rom中的程序)
  7、 p3支持第二功能:rxd、txd、int0、int1、t0、t1
  单片机内部i/o部件:(所为学习单片机,实际上就是编程控制以下i/o部件,完成指定任务)
  1、 四个8位通用i/o端口,对应引脚p0、p1、p2和p3;
  2、 两个16位定时计数器;(tmod,tcon,tl0,th0,tl1,th1)
  3、 一个串行通信接口;(scon,sbuf)
  4、 一个中断控制器;(ie,ip)
  针对at89c52单片机,头文件at89x52.h给出了sfr特殊功能寄存器所有端口的定义。教科书的160页给出了针对mcs51系列单片机的c语言扩展变量类型。
  单片机c语言编程基础
  1、 十六进制表示字节0x5a:二进制为01011010b;0x6e为01101110。
  2、 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。
  3、 ++var表示对变量var先增一;var—表示对变量后减一。
  4、 x |= 0x0f;表示为 x = x | 0x0f;
  5、 tmod = ( tmod & 0xf0 ) | 0x05;表示给变量tmod的低四位赋值0x5,而不改变tmod的高四位。
  6、 while( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}
  在某引脚输出高电平的编程方法:(比如p1.3(pin4)引脚)
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p1.3
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  p1_3 = 1; //给p1_3赋值1,引脚p1.3就能输出高电平vcc
  while( 1 ); //死循环,相当 loop: goto loop;
  }
  注意:p0的每个引脚要输出高电平时,必须外接上拉电阻(如4k7)至vcc电源。
  在某引脚输出低电平的编程方法:(比如p2.7引脚)
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p2.7
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  p2_7 = 0; //给p2_7赋值0,引脚p2.7就能输出低电平gnd
  while( 1 ); //死循环,相当 loop: goto loop;
  }
  在某引脚输出方波编程方法:(比如p3.1引脚)
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p3.1
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  while( 1 ) //非零表示真,如果为真则执行下面循环体的语句
  {
  p3_1 = 1; //给p3_1赋值1,引脚p3.1就能输出高电平vcc
  p3_1 = 0; //给p3_1赋值0,引脚p3.1就能输出低电平gnd
  } //由于一直为真,所以不断输出高、低、高、低……,从而形成方波
  }
  将某引脚的输入电平取反后,从另一个引脚输出:( 比如 p0.4 = not( p1.1) )
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p0.4和p1.1
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  p1_1 = 1; //初始化。p1.1作为输入,必须输出高电平
  while( 1 ) //非零表示真,如果为真则执行下面循环体的语句
  {
  if( p1_1 == 1 ) //读取p1.1,就是认为p1.1为输入,如果p1.1输入高电平vcc
  { p0_4 = 0; } //给p0_4赋值0,引脚p0.4就能输出低电平gnd
  else //否则p1.1输入为低电平gnd
  //{ p0_4 = 0; } //给p0_4赋值0,引脚p0.4就能输出低电平gnd
  { p0_4 = 1; } //给p0_4赋值1,引脚p0.4就能输出高电平vcc
  } //由于一直为真,所以不断根据p1.1的输入情况,改变p0.4的输出电平
  }
  将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 p2 = not( p3 ) )
  #include //该头文档中有单片机内部资源的符号化定义,其中包含p2和p3
  void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
  {
  p3 = 0xff; //初始化。p3作为输入,必须输出高电平,同时给p3口的8个引脚输出高电平
  while( 1 ) //非零表示真,如果为真则执行下面循环体的语句
  { //取反的方法是异或1,而不取反的方法则是异或0

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!