[通用8051核FLASH系列] HC89F003F4开发板试用心得之 -----裸奔

[复制链接]
2289|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为开漏带上拉输出就行了。       最后我的使用心得就是不要想当然,多看看数据手册吧!!!

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

  14. ***/


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

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


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

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

  44.         EA = 1;             //打开总中断
  45. }

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


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

  68. void TIMER0_Rpt(void) interrupt TIMER0_VECTOR
  69. {  
  70.    static  u8    Channel;     //LED当前显示通道
  71.    u8 i,u8Disp;  
  72.          
  73.   u8Disp=Table[disp[Channel]];
  74.   switch (Channel)
  75.   { case  0:              //对应数码管右起1位
  76.            { if(disp[4]&1)
  77.                 u8Disp &=0x7f; //设置DP小数点        
  78.               b1b=1;b2b=1;b3b=1;b4b=0;
  79.              break;        
  80.            }         
  81.                
  82.   case  1: //对应数码管右起2位
  83.         {  if(disp[4]&2)
  84.                u8Disp &=0x7f; //设置DP小数点
  85.            b1b=1;b2b=1;b3b=0;b4b=1;
  86.            break;         
  87.          }                 
  88.   case  2:
  89.          { if(disp[4]&4)
  90.               u8Disp &=0x7f; //设置DP小数点
  91.            b1b=1;b2b=0;b3b=1;b4b=1;
  92.            break;        
  93.           }               
  94.   case 3:
  95.          { if(disp[4]&8)
  96.               u8Disp &=0x7f; //设置DP小数点
  97.            b1b=0;b2b=1;b3b=1;b4b=1;
  98.            break;        //*/
  99.            }               
  100.   }

  101.         for(i=0;i<8;i++)
  102.   { u8Disp<<=1;SDA=CY;
  103.    CLK=1;
  104.   _nop_(); _nop_(); _nop_(); _nop_();                 
  105.    CLK=0;
  106. }
  107.         
  108.         Channel++;
  109.   if(Channel==4)
  110.     Channel=0;
  111.          
  112. }

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

粉丝
快速回复 在线客服 返回列表 返回顶部