[通用8051核FLASH系列]

HC89F003F4开发板试用心得之 -----裸奔

[复制链接]
1662|3
手机看帖
扫描二维码
随时随地手机跟帖
hzy41y|  楼主 | 2018-3-20 10:16 | 显示全部楼层 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-24 15:28 编辑

       HC89F003开发板套件在3月6号晚就收到了,但近段时间公司忙现在才有时间,我收到的套件有10片HC89F003比大家多了5片好开心。但不幸的是HC89F003开发板可能和《ddllxxrr》的《HC89S003F4到了,遇到点问题》贴子遇到一样的问题。刚好我有《SSOP28转DIP的板》就手工用拖焊上焊芯片。刚好前段时间做点焊机有一块4位的LED数码管,用74LS164加9015驱动的,原用89C2051做的。看了一下HC89F003例程, 在原程序上加上设置好内部高频其他就按原来的进行编译,下载运行,LED不显示???  用单步调试IO为本该为低电平的,但实际是有电压,不对阿,再看HC89F003的数据手册IO的默认模式为模拟输入,找到问题了,我想当然的用老AT51思维没看HC89F003的数据手册,没设置IO模式。  啊、啊、啊、最后加上IO为开漏带上拉输出就行了。       最后我的使用心得就是不要想当然,多看看数据手册吧!!!

/***
   ------------------------------__-----------------------------
     --| INT8/AN8/P2.0                           P0.7/AN7/INT7|--
     --| INT5/AN5/P0.5                           P0.6/AN6/INT6|--
     --| Vref/INT4/AN4/P0.4                    P2.1/AN9/INT9|--
     --| INT3/AN3/P0.3                        P2.2/AN10/INT10|--
     --| FLT2/INT2/AN2/P0.2                  P2.3/TDI/INT11|--   
     --| FLT1/INT1/AN1/P0.1                 P2.4/TDO/INT12|--   
     --| GND                                         P2.5/TCK/INT13|--
     --| FLT0/INT0/AN0/P0.0         P2.6/TMS/INT14/PLVD|--   
     --| VCC                                          P2.7/RST/INT15|--         
     --| XOUT/P1.1                                           P1.0/XIN|--  
   --------------------------------------------------------------

***/


#define  ALLOCATE_EXTERN
#include "HC89S003F4.h"
#include <intrins.h>  //_nop_();

//7段管字模                     0      1     2      3      4       5      6      7       8     9    不显
uchar code  Table [11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};


/***Led显示缓存   *******************/  
u8 disp[5]={0x0,       //对应左起4位   对应右起1位   设置
                   0x1,      //对应左起3位   对应右起2位   设置
                   0x5,      //对应左起2位   对应右起3位   设置
                  0x9,       //对应左起1位   对应右起4位   设置
                0x04,       //DP位设低4位有效为1则显示 0位为右1位
            };

//**************IO分配******************************************//
sbit  b1b=P0^4;     //b1+     //数码管共阳极驱动
sbit  b2b=P0^3;      //b2+
sbit  b3b=P0^2;      //b3+
sbit  b4b=P0^1;      //b4+
sbit  CLK=P0^7;     //74LS164_8PIN
sbit  SDA=P0^6;    //74LS164_1/2PIN
                                                
                                                
void TIMER_init()
{
        TCON1 = 0x00;   //Tx0定时器时钟为Fosc
        TMOD = 0x00;    //16位重装载定时器/计数器
        TH0 = 0xF5;
        TL0 = 0x95;       //T0定时时间2ms
        IE |= 0x02;        //打开T0中断
        TCON |= 0x10;   //使能T0

        EA = 1;             //打开总中断
}

void GPIO_init()
{
      //  P2M0 = P2M0&0xf0|0x0E;           //P20设置开漏带上拉输出
              P0M3=0XEE;                                  //P06;P07设置开漏带上拉输出
              P0M2= P0M0&0XF0|0X0e;              //P04设置开漏带上拉输出
              P0M1=0XEE;                                 //P02;P03设置开漏带上拉输出
              P0M0= P0M0&0X0F|0XE0;              //P01设置开漏带上拉输出
}


void main(void)
{
        
    while((CLKCON&0x20)!=0x20);      //等待内部高频RC起振
   CLKSWR = 0x51;                          //选择内部高频时钟为主时钟,内部高频RC0分频,Fosc=32MHz
   while((CLKSWR&0xC0)!=0x40);     //等待内部高频切换完成
   CLKDIV = 0x01;                          //Fosc2分频得到Fcpu,Fcpu=16MHz
            
                     
    WDTCCR = 0x00;                      //关闭看门狗 必须要关闭,默认是打开的
   GPIO_init();
   TIMER_init();
   while(1);
}

void TIMER0_Rpt(void) interrupt TIMER0_VECTOR
{  
   static  u8    Channel;     //LED当前显示通道
   u8 i,u8Disp;  
         
  u8Disp=Table[disp[Channel]];
  switch (Channel)
  { case  0:              //对应数码管右起1位
           { if(disp[4]&1)
                u8Disp &=0x7f; //设置DP小数点        
              b1b=1;b2b=1;b3b=1;b4b=0;
             break;        
           }         
               
  case  1: //对应数码管右起2位
        {  if(disp[4]&2)
               u8Disp &=0x7f; //设置DP小数点
           b1b=1;b2b=1;b3b=0;b4b=1;
           break;         
         }                 
  case  2:
         { if(disp[4]&4)
              u8Disp &=0x7f; //设置DP小数点
           b1b=1;b2b=0;b3b=1;b4b=1;
           break;        
          }               
  case 3:
         { if(disp[4]&8)
              u8Disp &=0x7f; //设置DP小数点
           b1b=0;b2b=1;b3b=1;b4b=1;
           break;        //*/
           }               
  }

        for(i=0;i<8;i++)
  { u8Disp<<=1;SDA=CY;
   CLK=1;
  _nop_(); _nop_(); _nop_(); _nop_();                 
   CLK=0;
}
        
        Channel++;
  if(Channel==4)
    Channel=0;
         
}

1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
一个M组成MCU| | 2018-3-20 10:55 | 显示全部楼层
赞赞赞

使用特权

评论回复
风的结构| | 2018-4-12 10:24 | 显示全部楼层
幽默的工程师,

使用特权

评论回复
wakayi| | 2018-7-14 21:12 | 显示全部楼层
我就喜欢裸奔的代码

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

75

帖子

2

粉丝