单片机同一IO口输出两组数组

单片机同一IO口输出两组数组
基于80C51,因为没有多余的口可用,只能用同一IO口输出两组数组,高4位一组输出0~9,低4位一组输出0~15!
问题补充:我要的是程序!谢谢!
悬赏分:100 - 解决时间:2009-9-13 09:27
原题网址:http://zhidao.baidu.com/question/115080063.html
;==========================================================
试试看:

    MOV   R0, #s1     ;数组一的指针
    MOV   R1, #s2     ;数组二的指针
    LCALL _HEBY_OUT   ;调用子程序,合并输出
    ......
;---------------------
_HEBY_OUT:
    MOV  A, @R0       ;取数组一的元素
    ANL  A, #0FH    
    SWAP A            ;放到高四位
    MOV  R0, A
    MOV  A, @R1       ;取数组二的元素
    ANL  A, #0FH
    ADD  A, R0        ;合并
    MOV  P1, A        ;输出
    RET

回答者: 做而论道 - 五级   2009-9-1 13:18
;==========================================================
最佳答案:
“做而论道”同学正解。
用C来做更简单, 子程序就一句话, 而且更加灵活, 想取数组那位直接给编号即可。

#include <REG51.H>
#define dat_out P0
unsigned char str1[]={1, 2, 3, 5, 6, 7......};//数值不要超过15即可
unsigned char str2[]={15, 8, 6, 12, 3, 6, 4.....};
/***********************
str0:数组1 str1:数组2
n1:取数组1中的某位数
n2:取数组2中的某位数
************************/
void exp(unsigned char *str1, unsigned char *str2, unsigned char n1,unsigned char n2)
{
    dat_out = ((str1[n1] << 4) & 0xf0) | (str2[n2] & 0x0f);
}
void main(void)
{
    exp(str1, str2, 1, 3); //P0口高4位输出str1数组的第1个元素"2"
                           //    低4位输出str2数组的第3个元素"12"
                           //P0 = 0x2C
    while(1);
}

回答者: ZGLEDA - 二级   2009-9-9 04:15
-
提问者对于答案的评价:谢谢
-
;============================================================
其他回答    共 6 条

--------------------------
做而论道的回答是对的
就是将高位数和低位数合并送到I/O口
如果你想不同时输出的话,可能有一些困难,只能采用 ---- 的回答,至于程序,我建议还是自己写,练习练习嘛
回答者: ----- 三级   2009-9-8 00:46
--------------------------
其它回答略。
--------------------------
原题网址:http://zhidao.baidu.com/question/115080063.html
;============================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值