打印

求助:怎样将模拟多通道开关的51程序改写成STM32的表达方式

[复制链接]
1884|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanse51|  楼主 | 2013-2-23 00:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请多多指点,谢谢。
两个问题:
  函数中,可以看出ABC的值是不停变换(程序里没考虑ABC一直加,溢出怎么办????)
sel_B,代指P1.2. 然后由ABC与0x02运算,得出状态值。 stm32中该如何表达??????

下面是个程序:
#include <reg51.h>
#include <intrins.h>
sbit     sel_A = P1^1;  多通道开关 A,B,C三个选择端对应80C51的三个端口,从而控制通道开关
sbit     sel_B = P1^2;
sbit     sel_C = P1^3;
unsigned char ABC;
void timer_set();                     //定时器初始化函数
     
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};                     

void IntTimer0() interrupt 1
{
  off_system_interrupt();
  ABC++;//  可以看出ABC的值是不停变换,程序里没考虑ABC一直加,溢出怎么办????
  sel_A=ABC&0x01;  //
  sel_B=ABC&0x02; // sel_B指P1.2. 然后由ABC与0x02运算,得出状态值。 stm32中如何表达??????
  sel_C=ABC&0x03; //
  delayNOP();               //定时消除抖动
  collection_data();
  on_system_interrupt();
}


//  函数名称: timer_set
//  功能说明: 设置定时器工作状态,与硬件有关
void timer_set()
     {
      TMOD=0x22;  //定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装)
      PCON=0x00;
      TH0=(256-100);  
      TL0=TH0;
      ET0=1;
      }
-----------------------------------------------------------------------------------------------------


沙发
uet_cache| | 2013-2-23 10:28 | 只看该作者
如果你是51程序移植到32上,那定时器和IO相关的操作都要改。如果你只仿着51语句操作32的话,可以看下库的操作方法。这种语句多的很。

使用特权

评论回复
板凳
cjhk| | 2013-2-23 17:57 | 只看该作者
主要将端口设置改一下   无非是寄存器指令不同  呵呵   熟悉一下ST单片机   之后改起来很容易  呵呵

使用特权

评论回复
地板
yanse51|  楼主 | 2013-2-23 19:37 | 只看该作者
sel_B=ABC&0x02; // sel_B指P1.2. 然后由ABC与0x02运算,得出状态值。 stm32中如何表达??????
主要是这种,不知如何表达。 端口配置,已经配好了

使用特权

评论回复
5
uet_cache| | 2013-2-24 09:27 | 只看该作者
sel_B是51中的位定义,STM32不支持位操作,需要端口寄存器操作。所以你需要判断赋的值为1还是0,再对端口的进行操作。
所以需要IF ELSE语句

使用特权

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

本版积分规则

39

主题

88

帖子

0

粉丝