打印
[STM8]

IAR STM8 C++ IO操作:

[复制链接]
2355|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CC2530|  楼主 | 2011-7-2 14:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "util_ioreg.hpp"

#include "stm8l15x_conf.h"

uint8 x;

void test_io1(void)
{
//IO_REG_BIT_t<uint8>::AttachIo(&io).set(0).clr(1).toggle(2).write(3,0).write(4,1).read(5,x).write(6,x);
//第0位清零,第1位置1,第2位翻转,第3位写0,第4位写1,第5位读取到x,第6位写x
//优化用小写

IO_REG_BIT_t<uint8>::AttachIo(&GPIOD->ODR).Set(0).Clr(1).Toggle(2).Write(3,0).Write(4,1).Read(5,x).Write(6,x);
//第0位清零,第1位置1,第2位翻转,第3位写0,第4位写1,第5位读取到x,第6位写x
//防优化用大写

}
void test_io2(void)
{
//IO_REG_FIELD_t<uint8,2,3>::AttachIo(&io).write(3).write(4).read(x).write(~x);
//第2位开始,3个位的值,写3,写4,读取到x,写入~x
//优化用小写

IO_REG_FIELD_t<uint8,2,3>::AttachIo(&GPIOD->ODR).Write(3).Write(4).Read(x).Write(~x);
//第2位开始,3个位的值,写3,写4,读取到x,写入~x
//防优化用大写
}
int main()
{
test_io1();
test_io2();

while(1);
}
沙发
CC2530|  楼主 | 2011-7-2 14:34 | 只看该作者
本帖最后由 CC2530 于 2011-7-2 14:35 编辑
IO_REG_BIT_t<uint8>::AttachIo(&GPIOD->ODR).Set(0).Clr(1).Toggle(2).Write(3,0).Write(4,1).Read(5,x).Write(6,x);
//第0位清零,第1位置1,第2位翻转,第3位写0,第4位写1,第5位读取到x,第6位写x

编译汇编:
//   13     IO_REG_BIT_t<uint8>::AttachIo(&GPIOD->ODR).Set(0).Clr(1).Toggle(2).Write(3,0).Write(4,1).Read(5,x).Write(6,x);
_Z8test_io1v:
        BSET      L:0x500f, #0x0
        BRES      L:0x500f, #0x1
        LD        A, L:0x500f
        XOR       A, #0x4
        LD        L:0x500f, A
        BRES      L:0x500f, #0x3
        BSET      L:0x500f, #0x4
        BTJF      L:0x500f, #0x5, L:??test_io1_0
        MOV       L:`x`, #0x1
        BSET      L:0x500f, #0x6
        RET
??test_io1_0:
        CLR       L:`x`
        BRES      L:0x500f, #0x6
        RET

使用特权

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

本版积分规则

个人签名:该死的ST,还不赶快出STM8L小FLASH片子

0

主题

262

帖子

1

粉丝