单片机c语言的问题 有关ACC的 菜鸟求教
作者&投稿:叔底 (若有异议请与网页底部的电邮联系)
您好,本人亲测,绝对可用,楼上那位肯定是错得,数组长度不能作为变量
#include "stdio.h"
void main()
{int n,i,a,sum=0;
printf("输入整数n和n个整数");
scanf("%d",&n);
for(i=1;i<=n;i++)
{scanf("%d",&a);
sum+=a;}
printf("%d",sum);
}
ACC7=ACC^7,就是在定义时写的用ACC7来表示ACC^7,这样在下面的程序写起来比较方便。比如说你还会见到sbit p0_0=P0^0,因为在reg52.h里面写的P0.0口是P0^0,程序员为了在写程序时输入方便和阅读方便就把它定义写成p0_0了。
sbit ACC7=ACC^7; //变量ACC7是ACC寄存器的第7位知道这句话是什么意思吗?
sbit同位是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。
在80C51单片机系统中,经常要访问特殊功能寄存器中的某些位,用关键字sbit定义可位寻址的特殊功能寄存器的位寻址对象。
定义方法有如下三种:
(1)sbit 位变量名 = 位地址
将位的绝对地址赋给位变量,位地址必须位于0x80H~0xFF之间。
(2)sbit 位变量名 = 特殊功能寄存器名^位位置
当可寻址位位于特殊功能寄存器中时,可采用这种方法。位位置是一个0~7之间的常数。
(3)sbit 位变量名 = 字节地址^位位置
这种方法是以一个常数(字节地址)作为基地址,该常数必须在0x80H~0xFF之间。位位置是一个0~7之间的常数。
uchar read_da1302_byte()
{
uchar i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:ACC7=1;break;
case 1:ACC7=0;break;
case 2:ACC7=1;break;
case 3:ACC7=0;break;
case 4:ACC7=0;break;
case 5:ACC7=0;break;
case 6:ACC7=0;break;
case 7:ACC7=0;break;
}
ACC=ACC>>1;
}
return(ACC);
}
朋友,应该这么写吧,右移语句的位置谢错地方了,少移了一次。 能明白吧,上面的程序不就是先赋值再右移的吗?这次该选我了吧!!
有区别,两个的顺序不一样了。第一种方法是先给ACC7赋值,然后再将ACC右移。而第二种方法你是先右移了,然后再给值。你只要改成:
uchar read_da1302_byte()
{
uchar i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:ACC7=1;break;
case 1:ACC7=0;break;
case 2:ACC7=1;break;
case 3:ACC7=0;break;
case 4:ACC7=0;break;
case 5:ACC7=0;break;
case 6:ACC7=0;break;
case 7:ACC7=0;break;
}
ACC=ACC>>1;
}
return(ACC);
就一样了。
实翰果糖: 你说的是51单片机么?累加器ACC是一个8位的存储单元,是用来放数据的.但是,这个存储单元有其特殊的地位,是单片机中一个非常关键的单元,很多运算都要通过ACC来进行.以后在学习指令时,常用A来表示累加器.但有一些地方例外,比如在PUSH指令中,就必须用ACC这样的名字.一般的说法,A代表了累加器中的内容、而ACC代表的是累加器的地址,一般的,A也可看作是ACC的简写
祁连县19199994626: 51单片机的ACC能再c语言中直接用么? - ?
实翰果糖: 如果在Keil里面,加上reg51.h头文件ACC是可以直接使用的,因为头文件里面已经定义好了.
祁连县19199994626: 单片机在使用c语言编程时,寄存器ACC和a,寄存器B和b,有什么区别? - ?
实翰果糖: ACC B的访问就是直接对寄存器的操作, a ,b 看你怎么定义了,你刚学单片机C语言吧!!!
祁连县19199994626: 51单片机中ACC怎么用?? - ?
实翰果糖: A和ACC的实质是一样的,对应地址都是0E0H, 只是汇编在使用时,在格式上取了两个名字. 你看看它们的使用方法,有的地方用A,有的地方用ACC,会发现有一定的规律. 当其要进行位表示时,必须用ACC, 比如要写成ACC.7,而不能...
祁连县19199994626: 单片机MCS - 51汇编语言中的ACC.7,OV,ACC是什么意思 - ?
实翰果糖: ACC就是A,是8位累加器,要具体对A上的每一位操作的时候,就要用ACC.*. ACC.7就是ACC的第七位,比如说A的值是11011010,那么ACC.7就等于1(第七位就是左数第二位). OV是psw上的溢出标志位,开始为0,如果之前的运算结果溢出,OV就会变成1
祁连县19199994626: 求单片机 c语言 控制引脚 - ?
实翰果糖: ACC 是累加器啊,是会自动计数的,在C语言中还敢这么用?需要另外定义一个变量!void IOMOD(unsigned char 位置,unsigned char 值) { unsigned char i, var_P1;var_P1 = P1;for(i=8; i>0; i--){ if (i==位置) var_P1 = 值;var_P1 = var_P1 >> ...
祁连县19199994626: 单片机中A和ACC有何区别? - ?
实翰果糖: 一样,但ACC可以位寻址 比如汇编语言MOV A,R1 //不可位寻址 SETB ACC.0 //将ACC.0置位.
祁连县19199994626: 有关8051单片机ACC累加器 - ?
实翰果糖: 计算机,包括单片机内只有二进制的数据,十六进制,十进制都是写程序时方便,具体转为程序时,全部要换回二进制.
祁连县19199994626: 单片机C语言编程?
实翰果糖:因为C语言中的变量名称只能是字母、数字、下划线,而ACC^0和P1^0中的^不合乎规则,所以无法编译.可以在主函数前用 sbit ACC0=ACC^0; sbit P1_0=P1^0; 进行定义, 然后在函数中写入ACC0=P1_0; 就可以正常编译了.
祁连县19199994626: 单片机 编程 相关问题 我的单片机是STC89C51RC 商业级,最高40M运算速度. - ?
实翰果糖: 首先建议楼主系统的学一下C语言和单片机.下面针对每个问题尽力回答一下:1、程序开头#include,只在单片机的C语言中有用,P...