[通用8051核FLASH系列] 【HC89S001P芯片试用】1、595串行转并行输出

[复制链接]
1303|2
 楼主| tlled 发表于 2019-3-23 16:39 | 显示全部楼层 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-24 14:58 编辑

    使用HC89S001P芯片来驱动74HC595串口转并口输出。

    一、电路图

      P02 --- 595-RCLK
      P03 --- 595-DAT
      P04 --- 595-SRCLK
    03231.png

    二、程序

    2.1、程序代码

  1. //main.c
  2. #define ALLOCATE_EXTERN

  3. #include "config.h"

  4. //系统初始化
  5. void SystemInit(void)
  6. {
  7.         /************************************系统初始化****************************************/
  8.         WDTCCR = 0x00;                                                //关闭看门狗
  9.         while((CLKCON&0x20)!=0x20);                        //等待内部高频RC起振
  10.         CLKSWR = 0x51;                                                //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
  11.         while((CLKSWR&0xC0)!=0x40);                        //等待内部高频切换完成
  12.         CLKDIV = 0x01;                                                //Fosc1分频得到Fcpu,Fcpu=16MHz
  13. }

  14. void main(void)
  15. {
  16.         uint i;
  17.         uchar j=0x01;
  18.         uchar k=0;
  19.         SystemInit();                //系统初始化
  20.         Init_Port();                //端口初始化
  21.         //EintInit();                        //外部中断初始化
  22.         //INT2_7_Init();        //外部中断2-7初始化
  23.         //CCO_Init();                //CCO输出
  24.         
  25.         Init_Timer0();        //初始化定时器0
  26.         Init_595();
  27.         
  28.         while(1)
  29.         {
  30.                 test_595();
  31.         }
  32. }
  33. //74hc595.c
  34. #include "config.h"

  35. //595初始化
  36. void Init_595(void)
  37. {
  38.         //PORT初始化
  39.         P0M1 = P0M1&0xF0|0x08;                                        //P02设置为推挽输出
  40.         P0M1 = P0M1&0x0F|0x80;                                        //P03设置为推挽输出
  41.         P0M2 = P0M2&0xF0|0x08;                                        //P04设置为推挽输出                                       
  42. }

  43. //595发送数据
  44. void SendDat_595(uchar dat)
  45. {
  46.         uchar i=0;
  47.         RCLK_595=0;
  48.         SRCLK_595=0;
  49.         
  50.         for(i=0;i<8;i++)
  51.         {
  52.                 SRCLK_595=0;
  53.                 if((dat&0x01)==0x01)
  54.                 {
  55.                         DAT_595=1;
  56.                 }
  57.                 else
  58.                 {
  59.                         DAT_595=0;
  60.                 }
  61.                 SRCLK_595=1;
  62.                 _nop_();
  63.                 _nop_();
  64.                 dat=dat>>1;
  65.                
  66.         }
  67.         
  68.         RCLK_595=1;        
  69. }

  70. void test_595(void)
  71. {
  72.         uchar j;
  73.         uchar k;
  74.         uint i;
  75.         
  76.         j=0x01;
  77.         for(k=0;k<8;k++)
  78.         {
  79.                 SendDat_595(~j);
  80.                 for(i=0;i<30000;i++);
  81.                 j=j<<1;
  82.         }
  83.         j=0x80;
  84.         for(k=0;k<8;k++)
  85.         {
  86.                 SendDat_595(~j);
  87.                 for(i=0;i<30000;i++);
  88.                 j=j>>1;
  89.         }
  90. }

    2.2、源代码    HC89S001P_TEST _595.rar (102.74 KB, 下载次数: 18)

    三、执行结果

    03232.gif





零三翟邢止胃 发表于 2019-3-25 11:23 | 显示全部楼层
多谢分享啊! 感谢啊!
dqqqqqq 发表于 2019-3-27 15:43 | 显示全部楼层
支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

701

帖子

7

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