找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1799|回复: 3
收起左侧

有大佬有义隆单片机的em78P153B,c例程吗,请求分享一下

[复制链接]
ID:609524 发表于 2021-3-11 22:05 | 显示全部楼层 |阅读模式
100黑币
如题

回复

使用道具 举报

ID:546198 发表于 2021-3-12 13:58 | 显示全部楼层
链接:https://pan.baidu.com/s/1ml5W_dUGsI0ikdgYeVZEmQ
提取码:wg00
em78P153S的C例程,主要是TCC,PWM设置。结合数据手册更好。
楼主可以去义隆官网下载EM78P372K的相关文档,里面有各个功能的C例程和汇编例程可以参考借鉴。
希望对你有帮助。

评分

参与人数 1黑币 +30 收起 理由
杨天想 + 30 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:609524 发表于 2021-3-15 15:56 | 显示全部楼层
dyhh 发表于 2021-3-12 13:58
链接:https://pan.baidu.com/s/1ml5W_dUGsI0ikdgYeVZEmQ
提取码:wg00
em78P153S的C例程,主要是TCC, ...

谢谢
回复

使用道具 举报

ID:332997 发表于 2022-1-13 11:18 | 显示全部楼层

  1. //*****************************************************************************
  2. //
  3. //*****************************************************************************
  4. //MCU:EM78P153B
  5. //Oscillator:IRC 4MHz        2Clock
  6. //WDT:enable
  7. //编译软件:eUIDE version 1.07.32.23
  8. //按键:短按设置功率值,长按确定所设的值,同时蜂鸣器响0.5s
  9. //数码管显示30~90,共7档功率值,若检测功率值不在所设的值附近,蜂鸣器响红灯亮。正常则蜂鸣器不响绿灯亮
  10. //-----------------------------------------------------------------------------
  11. #include "EM78P372N.H"       //EM78P372N的头文件
  12. #define        DISI()        _asm{disi}
  13. #define        WDTC()        _asm{wdtc}
  14. #define        NOP()        _asm{nop}
  15. #define        ENI()        _asm{eni}
  16. #define        SLEP()        _asm{slep}
  17. #define uchar        unsigned char

  18. #define KEY                P66
  19. #define        LED_R        P60
  20. #define        LED_G        P61
  21. #define BUZZER        P67
  22. #define        D1                P50
  23. #define        D2                P51
  24. #define        D3                P52
  25. #define        D4                P53
  26. #define        D5                P54
  27. #define        D6                P55


  28. bit f_ad;
  29. bit f_pwm;
  30. bit f_p_pwm;
  31. bit f_key_short;
  32. bit f_key_lock;
  33. bit f_led_change;        //
  34. bit f_buz;
  35. bit f_en;
  36. bit f_set;
  37. bit f_set_over;

  38. uchar check_ad_cnt;
  39. uchar ad_channel;

  40. uchar set_value;
  41. unsigned short ad_value;

  42. uchar cnt_led;
  43. uchar cnt_bai;
  44. uchar cnt_shi;
  45. uchar cnt_ge;

  46. unsigned short cnt_pwm;
  47. unsigned char cnt_key;
  48. unsigned char cnt_key1;

  49. uchar set_time=0;
  50. uchar set_time1=0;
  51. //-------------------------------------------------------------------
  52. extern int IntVecIdx; //occupied 0x10:rpage 0
  53. //----------------------------------------------
  54. void Sys_init(void);
  55. void Gpio_init(void);
  56. void Timer_init(void);
  57. void Sleep(void);
  58. void Check_ad(void);
  59. void Check_key(void);
  60. void Led_pro(void);
  61. void Adc_init(void);
  62. void Pwm_init(void);
  63. void delay_10ms(void);
  64. void AD_CALI_P(void);
  65. void Pro_buzzer(void);
  66. //---------------------------------------------
  67. void main()
  68. {
  69.         WDTC();
  70.         DISI();
  71. //--------------------------------------       
  72.         cnt_pwm=0;
  73.         cnt_key=0;
  74.         f_set=0;
  75.         f_set_over=0;
  76.         f_ad=0;
  77.         f_pwm=0;
  78.         f_p_pwm=0;
  79.         f_key_short=0;
  80.         f_key_lock=0;
  81.         f_led_change=0;       
  82.         check_ad_cnt=0;
  83.         ad_channel=0;
  84.         set_value=0;
  85.         ad_value=0;
  86.         cnt_led=0;
  87.         cnt_bai=0;
  88.         cnt_shi=0;
  89.         cnt_ge=0;
  90. //-------------------------------------
  91.         Sys_init();//SCR=0X7F;                        //选择4MHz
  92.         Gpio_init();
  93.         Pwm_init();       
  94.         Adc_init();
  95.         _asm
  96.         {
  97.                 mov                a,@0x0A                //1MS                仿真器内部晶振固定为16M不可调
  98.                 //mov                a,@0x0a
  99.                 contw
  100.         }
  101.         TCC=6;                                //tcc赋初值
  102.         IMR=1;                                //使能TCC中断
  103.         ISR1=0;
  104.         ISR2=0;
  105.        
  106.        
  107.         ENI();                                //开总中断
  108. //------------------------------------       
  109.         while(1)
  110.         {
  111.                 WDTC();
  112.                 Check_ad();
  113.                 //Check_key();
  114.                 Led_pro();
  115.                 Pro_buzzer();       
  116.         }
  117. }
  118. //----------------------------------------------------------------------------------------
  119. //----------------------------------------------------------------------------------------
  120. void _intcall ALLInt(void) @ int
  121. {     
  122.   switch(IntVecIdx)
  123.   {
  124.     case 0xA:
  125.     if(TCIF==1)                //TCC中断吗?
  126.     {
  127.             ISR2&=0XFE;                //清TCC中断标志
  128.             TCC+=6;                        //TCC赋初值
  129. //--------------------------------------------------------------------1ms
  130.   //----------------------------------------------------------------------------------------3ms enable check ad
  131.                   check_ad_cnt++;
  132.                   if(check_ad_cnt>2) {check_ad_cnt=0;f_ad=1;}
  133.   //---------------------------------------------------------------------------------D1~D6
  134.                   switch(set_value)
  135.                   {
  136.                           case 0:cnt_bai=0;cnt_shi=3;break;
  137.                           case 1:cnt_bai=0;cnt_shi=4;break;
  138.                           case 2:cnt_bai=0;cnt_shi=5;break;
  139.                           case 3:cnt_bai=0;cnt_shi=6;break;
  140.                           case 4:cnt_bai=0;cnt_shi=7;break;
  141.                           case 5:cnt_bai=0;cnt_shi=8;break;
  142.                           case 6:cnt_bai=0;cnt_shi=9;break;
  143.                           case 7:cnt_bai=1;cnt_shi=0;break;
  144.                   }
  145.                   cnt_led++;if(cnt_led>23) {cnt_led=0;}
  146.                   D1=0;D2=0;D3=0;D4=0;D5=0;D6=0;P5CR=0XFF;
  147.                   //--------------------------------------
  148.                   //if(cnt_led==1)        {if(cnt_bai==1) {P5CR &=0XEB;D3=1;}}//1B
  149.                   //else if(cnt_led==2)        {if(cnt_bai==1) {P5CR &=0XED;D5=1;}}//1C
  150.                   if(cnt_led==6) {if(cnt_bai==1) {P5CR &=0XEB;D5=1;}}//1G
  151.                   else if(cnt_led==8)        {if((cnt_shi!=1)&&(cnt_shi!=4)&&(cnt_bai==0)) {P5CR &=0XF9;D3=1;}}//2A
  152.                   else if(cnt_led==9)        {if((cnt_shi!=5)&&(cnt_shi!=6)&&(cnt_bai==0))        {P5CR &=0XF5;D2=1;}}//2B
  153.                   else if(cnt_led==10) {if((cnt_shi!=2)&&(cnt_bai==0)) {P5CR &=0XF9;D2=1;}}//2C
  154.                   else if(cnt_led==11) {if((cnt_shi!=1)&&(cnt_shi!=4)&&(cnt_shi!=7)&&(cnt_bai==0)) {P5CR &=0XF3;D3=1;}}//2D
  155.                   else if(cnt_led==12) {if(((cnt_shi==0)||(cnt_shi==2)||(cnt_shi==6)||(cnt_shi==8))&&(cnt_bai==0)) {P5CR &=0XF6;D4=1;}}//2E
  156.                   else if(cnt_led==13) {if((cnt_shi!=1)&&(cnt_shi!=2)&&(cnt_shi!=3)&&(cnt_shi!=7)&&(cnt_bai==0)) {P5CR &=0XF3;D4=1;}}//2F
  157.                   else if(cnt_led==14) {if((cnt_bai==1)||((cnt_shi!=0)&&(cnt_shi!=1)&&(cnt_shi!=7))) {P5CR &=0XF5;D4=1;}}//2G
  158.                   else if(cnt_led==16) {if(cnt_bai==0) {P5CR &=0XDE;D1=1;}}//3A
  159.                   else if(cnt_led==17) {if(cnt_bai==0) {P5CR &=0XF6;D1=1;}}//3B
  160.                   else if(cnt_led==18) {if(cnt_bai==0) {P5CR &=0XFC;D1=1;}}//3C
  161.                   else if(cnt_led==19) {if(cnt_bai==0) {P5CR &=0XFA;D3=1;}}//3D
  162.                   else if(cnt_led==20) {if(cnt_bai==0) {P5CR &=0XFA;D1=1;}}//3E
  163.                   else if(cnt_led==21) {if(cnt_bai==0) {P5CR &=0XFC;D2=1;}}//3F
  164.                   else if(cnt_led==22) {if(cnt_bai==1) {P5CR &=0XDD;D2=1;}}//3G
  165.   //--------------------------------------------------------------------------------
  166.                   f_p_pwm=1;//1ms timer count
  167. //-----------------------------------------------------------------------------------key
  168.                 if(!KEY)
  169.                 {
  170.                         if(!f_key_lock)
  171.                         {
  172.                                 cnt_key++;
  173.                                 if(cnt_key==10) {f_key_short=1;f_en=0;f_pwm=0;f_led_change=1;PWM1E=0;BUZZER=0;f_set_over=0;}
  174.                                 if(cnt_key>200)
  175.                                 {
  176.                                         cnt_key=0;cnt_key1++;
  177.                                         if(cnt_key1>18)
  178.                                         {
  179.                                                 f_key_short=0;f_key_lock=1;cnt_key1=0;
  180.                                                 f_en=1;f_set=1;set_time=0;set_time1=0;
  181.                                         }
  182.                                 }
  183.                         }
  184.                 }
  185.                 else
  186.                 {
  187.                         cnt_key=0;cnt_key1=0;f_key_lock=0;
  188.                         if(f_key_short)
  189.                         {
  190.                                 f_key_short=0;
  191.                                 set_value++;if(set_value>7) {set_value=0;}
  192.                         }
  193.                 }
  194. //----------------------------------------------------------------------------               
  195.                 if(f_set)
  196.                 {
  197.                         if(set_time1<2) {if(!PWM1E) {PWM1E=1;}}
  198.                         else {if(PWM1E) {PWM1E=0;BUZZER=0;}}
  199.                         set_time++;
  200.                         if(set_time>249)
  201.                         {
  202.                                 set_time=0;set_time1++;
  203.                                 if(set_time1==8)
  204.                                 {
  205.                                         set_time1=0;f_set=0;f_set_over=1;
  206.                                 }
  207.                         }
  208.                 }
  209. //----------------------------------------------------------------------------
  210.     }
  211.     break;
  212.   }        
  213. }
  214. //-------------------------------------------------------------------------------
  215. void Pro_buzzer(void)
  216. {
  217.         if((f_pwm)&&(f_p_pwm)&&(f_set_over))
  218.         {
  219.                 cnt_pwm++;
  220.                 if(cnt_pwm>450) {cnt_pwm=0;}
  221.                 if(cnt_pwm>250) {if(PWM1E) {PWM1E=0;BUZZER=0;}}
  222.                 else if(cnt_pwm>150) {if(!PWM1E) {PWM1E=1;}}
  223.                 else if(cnt_pwm>100) {if(PWM1E) {PWM1E=0;BUZZER=0;}}
  224.                 else {if(!PWM1E) {PWM1E=1;}}
  225.                 f_p_pwm=0;
  226.         }
  227. }
  228. //-----------------------------------------------------------------------
  229. /*void Check_key(void)
  230. {
  231.         if(KEY)
  232.         {
  233.                 if(f_key_down)
  234.                 {
  235.                         delay_10ms();
  236.                         if(KEY) {f_key_down=0;}
  237.                 }
  238.         }
  239.         else
  240.         {
  241.                 if(!f_key_down)
  242.                 {
  243.                         delay_10ms();
  244.                         if(!KEY)
  245.                         {
  246.                                 f_key_down=1;
  247.                                 set_value++;if(set_value>7) {set_value=0;}
  248.                         }
  249.                 }
  250.         }
  251. }*/
  252. //------------------------------------------------------------------------
  253. void Led_pro(void)                        //led
  254. {
  255.         if(f_led_change)
  256.         {
  257.                 if(f_pwm)
  258.                 {
  259.                         LED_R=1;LED_G=0;
  260.                 }
  261.                 else
  262.                 {
  263.                         LED_R=0;LED_G=1;
  264.                 }
  265.                 f_led_change=0;
  266.         }
  267. }
  268. //-----------------------------------------------------------------------
  269. void Check_ad(void)                //检AD
  270. {
  271.         if(f_ad&&f_en)
  272.         {
  273.                 uchar i=0;unsigned short addatah=0;
  274.                 ad_value=0;
  275.                 for(i=0;i<16;i++)
  276.                 {
  277.                         ADDATA1H=0;ADDATA1L=0;addatah=0;
  278.                         ADRUN=1;
  279.                         while(ADRUN);
  280.                         addatah=ADDATA1H;
  281.                         ad_value+=(addatah<<8)+ADDATA1L;
  282.                 }
  283.                 ad_value &=0xfffe;
  284.                 ad_value>>=1;
  285.                 ad_value &=0xfffe;
  286.                 ad_value>>=1;
  287.                 ad_value &=0xfffe;
  288.                 ad_value>>=1;
  289.                 ad_value &=0xfffe;
  290.                 ad_value>>=1;
  291.                 f_ad=0;
  292.        
  293.         //--------------------------------------------------
  294.         switch(set_value)
  295.         {
  296.                 case 0://30W
  297.                 if((ad_value>1353)||(ad_value<1181))
  298.                 {
  299.                         if(!f_pwm) {f_pwm=1;f_led_change=1;cnt_pwm=0;}
  300.                 }
  301.                 else if(f_pwm)
  302.                 {f_pwm=0;f_led_change=1;cnt_pwm=0;PWM1E=0;BUZZER=0;}
  303.                 break;
  304.                
  305.                 case 1://40W
  306.                 if((ad_value>1783)||(ad_value<1611))
  307.                 {
  308.                         if(!f_pwm) {f_pwm=1;f_led_change=1;cnt_pwm=0;}
  309.                 }
  310.                 else if(f_pwm)
  311.                 {f_pwm=0;f_led_change=1;cnt_pwm=0;PWM1E=0;BUZZER=0;}
  312.                 break;
  313.                
  314.                 case 2://50W
  315.                 if((ad_value>2212)||(ad_value<2040))
  316.                 {
  317.                         if(!f_pwm) {f_pwm=1;f_led_change=1;cnt_pwm=0;}
  318.                 }
  319.                 else if(f_pwm)
  320.                 {f_pwm=0;f_led_change=1;cnt_pwm=0;PWM1E=0;BUZZER=0;}
  321.                 break;
  322.                
  323.                 case 3://60W
  324.                 if((ad_value>2642)||(ad_value<2470))
  325.                 {
  326.                         if(!f_pwm) {f_pwm=1;f_led_change=1;cnt_pwm=0;}
  327.                 }
  328.                 else if(f_pwm)
  329.                 {f_pwm=0;f_led_change=1;cnt_pwm=0;PWM1E=0;BUZZER=0;}
  330.                 break;
  331.                
  332.                 case 4://70W
  333.                 if((ad_value>3072)||(ad_value<2900))
  334.                 {
  335.                         if(!f_pwm) {f_pwm=1;f_led_change=1;cnt_pwm=0;}
  336.                 }
  337.                 else if(f_pwm)
  338.                 {f_pwm=0;f_led_change=1;cnt_pwm=0;PWM1E=0;BUZZER=0;}
  339.                 break;
  340.                
  341.                 case 5://80W
  342.                 if((ad_value>3502)||(ad_value<3330))
  343.                 {
  344.                         if(!f_pwm) {f_pwm=1;f_led_change=1;cnt_pwm=0;}
  345.                 }
  346.                 else if(f_pwm)
  347.                 {f_pwm=0;f_led_change=1;cnt_pwm=0;PWM1E=0;BUZZER=0;}
  348.                 break;
  349.                
  350.                 case 6://90W
  351.                 if((ad_value>3931)||(ad_value<3759))
  352.                 {
  353.                         if(!f_pwm) {f_pwm=1;f_led_change=1;cnt_pwm=0;}
  354.                 }
  355.                 else if(f_pwm)
  356.                 {f_pwm=0;f_led_change=1;cnt_pwm=0;PWM1E=0;BUZZER=0;}
  357.                 break;
  358.                
  359.                 case 7://100W                100W对应电压值超过4V,此case无效,只作演示
  360.                 if(ad_value>4094)
  361.                 {
  362.                         if(!f_pwm) {f_pwm=1;f_led_change=1;cnt_pwm=0;}
  363.                 }
  364.                 else if(f_pwm)
  365.                 {f_pwm=0;f_led_change=1;cnt_pwm=0;PWM1E=0;BUZZER=0;}
  366.                 break;
  367.                 default:break;
  368.         }
  369.         }
  370. }
  371. //--------------------------------------------------------------------------------------
  372. //-------------------------------------------------------------------------------
  373. //-------------------------------------------------------------------------------
  374. void Sys_init(void)
  375. {
  376.         SCR=0X6F;                //4MHz
  377.         WDTCR=0X80;                //enable WDT        分频比1:1
  378. }
  379. //--------------------------------------------------------------
  380. void Timer_init(void)
  381. {

  382.         _asm{MOV A,0x0a};
  383.         _asm{CONTW}                //4*4*(256-6)/4M=1ms
  384.         ISR1=0;
  385.         ISR2=0;
  386.         IMR=0X01;
  387. }
  388. //---------------------------------------------------------------
  389. void Pwm_init(void)
  390. {
  391.         PWMCON=0X00;        //pwm1
  392.         TMRCON=0XD3;
  393.         PRD1=185;
  394.         DT1=92;
  395.         //PWM1E=1;
  396. }
  397. //---------------------------------------------------------------
  398. void Gpio_init(void)
  399. {
  400.         P5CR=0XFF;        //P5 INPUT
  401.         P6CR=0X40;        //P66(KEY)
  402.         P7CR=0X01;        //P70(ADC5)
  403.        
  404.         P5PDCR=0X00;        //P5        enable pull down
  405.         P6ODCR=0X00;        //P6        disable Open-drain
  406.         P5PHCR=0XFF;        //P5        disable pull up
  407.         P6PHCR=0XBF;        //P66        pull up
  408.        
  409.         AISR=0X20;        //enable ADC5
  410.        
  411.         PORT5=0;
  412.         PORT6=0;
  413.         PORT7=0;
  414.        
  415.         LED_G=1;
  416. }
  417. //---------------------------------------------------------------
  418. void Adc_init(void)
  419. {
  420.         ADCON=0X0D;        //16分频   ADC正常功耗运行                ADC5
  421.         ADOC=0X02;        //4V
  422. }
  423. //---------------------------------------------------------------
  424. void delay_10ms(void)
  425. {
  426.         _asm
  427.         {
  428.                     mov       a,@18   
  429.          mov      0x3f,a// de_1,a
  430.    delay_lp5:
  431.          mov       a,@250
  432.          mov       0x3e,a//de_2,a
  433.    delay_lp4:
  434.          nop
  435.          djz       0x3e//de_2
  436.          jmp       delay_lp4
  437.          djz       0x3f//de_1
  438.          jmp       delay_lp5
  439.         }
  440. }


  441. void _intcall TCC_l(void) @ 0x09:low_int 2
  442. {
  443. _asm{MOV A,0x2};
  444. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表