搜索
bottom↓
回复: 16

求助.松翰单片机 2714 用仿真器可以, 但是烧到单片机不行.

[复制链接]

出0入0汤圆

发表于 2015-1-27 17:45:21 | 显示全部楼层 |阅读模式
求助..
  用仿真器 效果好好的.但是用单片机就是不行...

  大神有没有遇到这么蛋疼的问题没? 调试2天了..很纠结.很苦逼..

  顺便问下,,有没有替代的 .SOP14 这个单片机的.

出0入0汤圆

发表于 2015-1-27 20:40:49 | 显示全部楼层
是不工作吗? 还是其他问题?方便把代码发布一下,松翰芯片用了十多年,

出0入0汤圆

 楼主| 发表于 2015-1-27 20:43:27 | 显示全部楼层
chenchunlin 发表于 2015-1-27 20:40
是不工作吗? 还是其他问题?方便把代码发布一下,松翰芯片用了十多年,

好的.马上.

出0入0汤圆

 楼主| 发表于 2015-1-27 20:44:18 | 显示全部楼层
chenchunlin 发表于 2015-1-27 20:40
是不工作吗? 还是其他问题?方便把代码发布一下,松翰芯片用了十多年,
  1. #include <SN8P2711B.h>

  2. //5024端口定义
  3. #define MBI5024_OE   FP54
  4. #define MBI5024_LE   FP01
  5. #define MBI5024_CLK  FP00
  6. #define MBI5024_SDI  FP40

  7. //宏定义
  8. #define key_light  0x10
  9. #define key_mode   0x08

  10. #define   u8  unsigned char
  11. #define   u16 unsigned long
  12. #define   u32 unsigned long long


  13. //变量声明
  14. u8  tmp8;
  15. u8  mode1Timer;
  16. u16 AutoTime;
  17. u8 autoMode ;   

  18. u8  modeSelect;
  19. u8  lightMode;   //亮度.3级
  20. u8 Trg;          //按键定义的两个变量
  21. u8 Cont;
  22. u8 ReadData;


  23. //函数声明
  24. void IO_Setting(void);
  25. void Timer_Setting(void);
  26. void lighAjd(void);
  27. void init_screen(void);

  28. #define   bit_test(var,bit)     ((var)&(1<<(bit)))
  29. #define   bit_set(var,bit)      ((var)|=(1<<(bit)))
  30. #define   bit_clear(var,bit)      ((var)&=~(1<<(bit)))


  31. u8 mode1times;
  32. u8 mode2flag;
  33. u8 mode3flag;
  34. u8 mode3value;
  35. u8 keyflag;

  36. __asm
  37. {
  38. .data
  39.         acc_buf                ds        1
  40.         pflag_buf        ds        1
  41. }

  42. //主函数
  43. void main(void)
  44. {
  45.   IO_Setting();
  46.   Timer_Setting();
  47.   FGIE = 1;

  48.         //开机模式为1. 亮度最大.
  49.   modeSelect = 1;
  50.   MBI5024_OE = 0;
  51.   lightMode = 0;
  52.   
  53.   lighAjd(); //调节亮度
  54.                                
  55.         init_screen();
  56.         mode1times =0;
  57.        
  58.   while(1)
  59.         {
  60.                 next:
  61.                        
  62.                 WDTR = 0x5A;
  63.                
  64.                 //按键读取
  65.                 if(keyflag >=1)
  66.                 {
  67.                         keyflag = 0;
  68.                         ReadData = P4^0xff;                      // 1
  69.             Trg = ReadData & (ReadData ^ Cont);      // 2
  70.             Cont = ReadData;                         // 3
  71.     }
  72.            
  73.                        
  74.                 //模式1,流水灯
  75.                 if( mode1Timer >= 1 && modeSelect == 1)   
  76.                 {
  77.                         mode1Timer = 0;
  78.                        
  79.                         MBI5024_CLK = 1; MBI5024_CLK = 0;
  80.                         MBI5024_LE = 1;  MBI5024_LE = 0;

  81.                         mode1times++;
  82.                         if(mode1times >=128)
  83.                         {
  84.                                 MBI5024_SDI ^=1;
  85.                                 mode1times = 0;
  86.                         }
  87.                 }
  88.                
  89.                 //模式按键
  90.                 if( key_mode & Trg )
  91.                 {
  92.                         bit_clear(Trg,3);
  93.                         autoMode = 0;
  94.                         modeSelect++;
  95.                        
  96.                         init_screen();
  97.                         mode2flag = 20;
  98.                         mode1Timer = 0;
  99.                        
  100.                         lighAjd();
  101.                 }
  102.                
  103.                 //亮度按键
  104.                 if( key_light & Trg)
  105.           {
  106.                   bit_clear(Trg,4);
  107.                   if( modeSelect ==3 ) goto next;  //模式3的时候,是无效的
  108.                  
  109.                   lightMode++;
  110.                         if( lightMode==3) lightMode = 0;
  111.                        
  112.                         lighAjd();
  113.           }
  114.        
  115.                 //模式2, 暴闪
  116.                 if( modeSelect == 2 )
  117.                 {
  118.                        
  119.                         MBI5024_CLK = 1; MBI5024_CLK = 0;
  120.                        
  121.                         if( mode1Timer >= mode2flag) //开始是100,
  122.                         {
  123.                                 MBI5024_SDI ^=1;
  124.                                 mode2flag --;
  125.                                 if( mode2flag ==0) mode2flag = 20;
  126.                                 mode1Timer = 0;
  127.                                
  128.                                 MBI5024_LE = 1;  MBI5024_LE = 0;
  129.                         }
  130.                 }
  131.                
  132.                 //模式3,呼吸灯
  133.                 if( modeSelect == 3)
  134.                 {
  135.                         MBI5024_CLK = 1; MBI5024_CLK = 0;
  136.                         MBI5024_LE = 1;  MBI5024_LE = 0;
  137.                        
  138.                         if( mode1Timer>1)
  139.                         {
  140.                                 mode1Timer = 0;
  141.                                 if( mode3flag == 0)
  142.                                 {
  143.                                         mode3value--;
  144.                                         if( mode3value<=30) mode3flag=1;
  145.                                 }
  146.                                 else
  147.                                 {
  148.                                         mode3value++;
  149.                                         if( mode3value >= 254) mode3flag = 0;
  150.                                 }
  151.                                
  152.                                 FPWM0OUT = 1;
  153.                                 TC0R = mode3value;
  154.                         }
  155.                        
  156.                 }
  157.                
  158.                 //模式4,常亮
  159.                 if( modeSelect == 4)
  160.                 {
  161.                         MBI5024_CLK = 1; MBI5024_CLK = 0;
  162.                         MBI5024_LE = 1;  MBI5024_LE = 0;
  163.                 }
  164.                
  165.                 //模式5. 自动模式
  166.                 if( modeSelect == 5)
  167.                 {
  168.                         autoMode = 1;
  169.                         AutoTime = 0;
  170.                         modeSelect = 1;
  171.                         init_screen();
  172.                 }
  173.                
  174.                 //模式6
  175.                 if( modeSelect == 6)
  176.                 {
  177.                         modeSelect = 1;
  178.                 }
  179.                
  180.                 //模式7
  181.                
  182.                
  183.                 //开启了自动模式
  184.                 if( autoMode == 1)
  185.                 {
  186.                         if( AutoTime > 1000)
  187.                         {
  188.                                 AutoTime = 0;
  189.                                 modeSelect++;
  190.                                 lighAjd();
  191.                                 init_screen();
  192.                         }
  193.                 }

  194.         }

  195. }



  196. //初始化第一次显示.
  197. void init_screen(void)
  198. {
  199.         //1. 清除显示
  200.         MBI5024_SDI = 0;
  201.         for(tmp8=0;tmp8<128;tmp8++)
  202.         {
  203.                 MBI5024_CLK = 1;
  204.                 MBI5024_CLK = 0;
  205.         }
  206.        
  207.         MBI5024_LE = 1;
  208.         MBI5024_LE = 0;
  209.        
  210.         //2.发送一个 1.
  211.         MBI5024_SDI = 1;
  212.         for( tmp8 =0;tmp8<modeSelect;tmp8++)
  213.         {
  214.                 MBI5024_CLK = 1;
  215.                 MBI5024_CLK = 0;
  216.         }
  217.         MBI5024_LE = 1;
  218.         MBI5024_LE = 0;
  219.        
  220.         //3.延时
  221.         mode1Timer = 0;
  222.   while( mode1Timer<100);
  223. }


  224. //调节亮度
  225. void lighAjd(void)
  226. {
  227.         if( lightMode == 0)
  228.         {
  229.                 FPWM0OUT = 0;   //关闭PWM ,直接开启OE
  230.                 MBI5024_OE = 0;
  231.         }
  232.         else if( lightMode == 1)
  233.         {
  234.                 FPWM0OUT = 1;
  235.                 TC0R = 128;
  236.         }
  237.         else if( lightMode == 2)
  238.         {
  239.                 FPWM0OUT = 1;
  240.                 TC0R = 192;
  241.         }
  242. }


  243.        
  244.        

  245. __interrupt ISR(void)
  246. {
  247.        
  248.         __asm
  249.         {
  250.                 mov        acc_buf,a                        // Push ACC to buffer
  251.                 mov        a,pflag
  252.                 b0mov        pflag_buf,a                        // Push PFLAG to buffer
  253.         }
  254.                
  255.        
  256.        
  257.   //Timer1 10ms
  258.   if(FTC1IRQ)
  259.   {
  260.           FTC1IRQ=0;
  261.          
  262.           mode1Timer++;
  263.           AutoTime++;
  264.           keyflag++;
  265.   }
  266.   
  267.   
  268.   __asm
  269.         {
  270.           mov        a,pflag_buf
  271.                 b0mov        pflag,a                                // Pop pflag_buf to pflag
  272.                 mov        a,acc_buf                         // Pop acc_buf to acc
  273.   }
  274. }

  275.                        
  276. //端口设置
  277. void IO_Setting(void)
  278. {
  279.   P0M = 0x0F;        //P0 Input-Output value
  280.   P0UR = 0x03;        //P0 pull up value
  281.   P0 = 0X00;        //P0 register value
  282.   P4M = 0x07;        //P4 Input-Output value
  283.   P4UR = 0x19;     //P4 pull up value
  284.   P4CON = 0x00;        //P4 Analog-Digital value
  285.   P4 = 0X00;        //P4 register value
  286.   P5M = 0x18;        //P5 Input-Output value
  287.   P5UR = 0x18;        //P5 pull up value
  288.   P5 = 0X00;        //P5 register value
  289. }

  290. //定时器设置
  291. //Timer0 PWM
  292. //Timer1 10ms
  293. void Timer_Setting(void)
  294. {
  295.   TC0M = 0x71;        //TC0M register value, Fcpu: 1.000000MHZ
  296.   FTC0X8 = 0;        //CLK source: Fcpu
  297.   TC0C = 0x00;        //TC0C register value, time: 200.000000us(5000.000000HZ)
  298.   TC0R = 0x80;        //TC0R register value
  299.   FALOAD0 = 0;
  300.   FTC0OUT = 0;
  301.   FTC0CKS = 0;
  302.   FPWM0OUT = 1; //PWM out enable
  303.   FTC0ENB = 1;        //TC0 enable
  304.   
  305.   
  306.   TC1M = 0x04;        //TC1M register value, Fcpu: 1.000000MHZ
  307.   FTC1X8 = 0;        //CLK source: Fcpu
  308.   TC1C = 0xD9;        //TC1C register value, time: 10.000000ms(100.000000HZ)
  309.   TC1R = 0xD9;        //TC1R register value
  310.   FTC1IRQ = 0;
  311.   FTC1IEN = 1;        //TC1 Interrupt enable
  312.   FTC1CKS = 0;
  313.   FTC1ENB = 1;        //TC1 enable
  314. }




复制代码

出0入0汤圆

 楼主| 发表于 2015-1-27 20:46:07 | 显示全部楼层
chenchunlin 发表于 2015-1-27 20:40
是不工作吗? 还是其他问题?方便把代码发布一下,松翰芯片用了十多年,

其实代码简单.

通过2个按键. 一个控制亮度,一个控制 闪烁模式

我在仿真的时候,一切都OK

但接了单片机.开机的时候,是运行模式1, 我按了按键,应该是到模式2, 但是,就像是重启了一样. 又回到模式一了.

出0入0汤圆

 楼主| 发表于 2015-1-27 20:47:01 | 显示全部楼层
chenchunlin 发表于 2015-1-27 20:40
是不工作吗? 还是其他问题?方便把代码发布一下,松翰芯片用了十多年,

实在不行.就去搞汇编写了.

在网上找了一下资料.别说.call多了...可我..call的很少..

出0入0汤圆

发表于 2015-1-27 21:07:51 | 显示全部楼层
头文件怎么是 #include <SN8P2711B.h> 呢,芯片选错了吗?

出0入0汤圆

 楼主| 发表于 2015-1-27 21:08:37 | 显示全部楼层
youlongam 发表于 2015-1-27 21:07
头文件怎么是 #include  呢,芯片选错了吗?

没有哦.烧录就是烧录这个芯片的

出0入0汤圆

 楼主| 发表于 2015-1-27 21:09:58 | 显示全部楼层
youlongam 发表于 2015-1-27 21:07
头文件怎么是 #include  呢,芯片选错了吗?

这个是.单片机也可以运行. 因为我一开机都到模式1.  一直在运行模式1 .我按了按键应该到模式2.但是,一按又回来模式 1 了

出0入0汤圆

发表于 2015-1-27 22:30:23 来自手机 | 显示全部楼层
检查硬件,上拉电阻?

出0入0汤圆

 楼主| 发表于 2015-1-27 22:36:16 | 显示全部楼层
erxun 发表于 2015-1-27 22:30
检查硬件,上拉电阻?


没有上拉电阻的.内部的上拉

我刚刚把所有的 函数都写到一起了.现在就主函数和一个中断函数.

可,还是一样.按按键,程序又回到开始了

出0入0汤圆

发表于 2015-1-28 12:17:27 | 显示全部楼层
用C为什么中断里还要用汇编做ACC及状态字节保护呢?

出0入8汤圆

发表于 2015-1-28 13:55:49 | 显示全部楼层
我来瞎猜,检查复位电路...

出0入0汤圆

发表于 2015-1-28 14:44:23 | 显示全部楼层
我也来瞎猜,是不是烧录选项选错了。我就犯过这样的错误

出0入0汤圆

 楼主| 发表于 2015-1-28 17:20:47 | 显示全部楼层
fuqiang4343 发表于 2015-1-28 14:44
我也来瞎猜,是不是烧录选项选错了。我就犯过这样的错误

烧录 只有2模式呀. 一个BP 一个BPV? 呀,还有什么模式?

出0入0汤圆

发表于 2015-1-28 22:36:14 | 显示全部楼层
sweet_136 发表于 2015-1-28 17:20
烧录 只有2模式呀. 一个BP 一个BPV? 呀,还有什么模式?

哦,我忘记了,亿隆程序下到烧录器时是要配置选项的,松翰配置是在程序里

出0入0汤圆

 楼主| 发表于 2015-1-29 18:05:17 | 显示全部楼层
再次报告.
问题已经解决
  发现是 板子的电容没接造成.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 00:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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