凌阳SPCE061A单片机实验程序文档格式.docx
- 文档编号:21343372
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:28
- 大小:20.22KB
凌阳SPCE061A单片机实验程序文档格式.docx
《凌阳SPCE061A单片机实验程序文档格式.docx》由会员分享,可在线阅读,更多相关《凌阳SPCE061A单片机实验程序文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
LPN:
BP+=1
CMPBP,0X9000
JNZLPN
RETF
.ENDP
//使用C语言实现A口的输出
#defineP_IOA_Data(volatileunsignedint*)0x7000
#defineP_IOA_Dir(volatileunsignedint*)0x7002
#defineP_IOA_Attrib(volatileunsignedint*)0x7003
#defineP_watchdog_clear(volatileunsignedint*)0X7012
intmain(void)
{
unsignedinti=0,j=0;
*P_IOA_Dir=0xffff;
*P_IOA_Attrib=0xffff;
*P_IOA_Data=0x0000;
while
(1)
{
for(i=0;
i<
=255;
++i)
{
for(j=0;
j<
=2222;
++j)//延时,可以更改
*P_IOA_Data=i;
*P_watchdog_clear=0x0001;
}
}
}
//使用汇编语言实现A口作为输入口、B口作为输出口
.defineP_IOA_Dir0X7002//定义地址
.defineP_IOB_Dir0X7007
.defineP_IOB_Attrib0X7008
.defineP_IOB_Data0X7005
R1=0x0000//A口初始化
R1=0x00FF//B口初始化
[P_IOB_Dir]=R1
[P_IOB_Attrib]=R1
R1=0x0000
[P_IOB_Data]=R1
LPP:
R1=[P_IOA_Data]//键盘程序调用取键值
CMPR1,0
JZLP2
CALLdelay
R2=[P_IOA_Data]
CMPR1,R2
delay:
LP2:
R1=0X0001//清狗
[P_watchdog_clear]=R1
JMPLPP
//使用C语言实现A口作为输入口、B口作为输出口
#defineP_IOB_Data(volatileunsignedint*)0X7005
#defineP_IOB_Dir(volatileunsignedint*)0X7007
#defineP_IOB_Attrib(volatileunsignedint*)0X7008
#defineP_watchdog_clear(volatileunsignedint*)0X7012
intf(unsignedintt)
unsignedints;
t=*P_IOA_Data;
if(t==0)
returnt;
else
delay();
s=*P_IOA_Data;
if(t==s)
returnt;
else
return0;
}
voiddelay(void)
unsignedintm;
for(m=0;
m<
100;
++m)
{
*P_watchdog_clear=0x0001;
}
unsignedinti,t;
*P_IOA_Dir=0x0000;
////A口初始化
*P_IOA_Attrib=0x0000;
*P_IOB_Dir=0x00FF;
//B口初始化
*P_IOB_Attrib=0x00FF;
*P_IOB_Data=0x0000;
//取键值
i=f(t);
//返回键值
if(i==0)
*P_IOB_Data=i;
else
*P_IOB_Data=i;
}
//系统时钟
.defineP_SystemClock0X7013
R1=0X0000//24.576MHZ
[P_SystemClock]=R1
[P_IOA_Data]=R1
R1=0XFFFF
CALLdelay
delay:
BP=0xFFFF
BP-=1
JMPLP1
#defineP_SystemClock(volatileunsignedint*)0X7013
unsignedinti,j;
*P_IOA_Dir=0x00FF;
*P_IOA_Attrib=0x00FF;
*P_SystemClock=0x0000;
2222;
for(j=0;
j<
22;
++j)
{
*P_IOA_Data=0x0000;
}
*P_IOA_Data=0xFFFF;
}
//使用汇编语言定时器TimerA
.defineP_IOB_Dir0x7007
.defineP_IOB_Attrib0x7008
.defineP_IOB_Data0x7005
.defineP_watchdog_clear0x7012
.defineP_TimerA_Data0x700A
.defineP_TimerA_ctrl0x700B
R1=0x0FFF//B口初始化同相低电平输出
R1=0x0215//输入256HZ输出1秒占空比8/16
[P_TimerA_ctrl]=R1
R1=0xFFEF//计数初值
[P_TimerA_Data]=R1
R2=0x0001//清狗
[P_watchdog_clear]=R2
JMPLP1
//使用C语言定时器TimerA
#defineP_TimerA_Data(volatileunsignedint*)0X700A
#defineP_TimerA_ctrl(volatileunsignedint*)0X700B
*P_IOB_Dir=0x0F00;
//B口初始化同相低电平输出
*P_IOB_Attrib=0x0F00;
*P_TimerA_ctrl=0x0215;
//输入256HZ输出1秒占空比8/16
*P_TimerA_Data=0xFFEF;
//计数初值
//使用汇编语言A/D转换
.defineP_ADC_MUX_Ctrl0X702B
.defineP_ADC_Ctrl0X7015
.defineP_ADC_MUX_Data0X702C
R1=0x0000//A口初始化悬浮输入口
R1=0x00FF
[P_IOA_Attrib]=R1
[P_IOB_Dir]=R1//B口初始化同相低电平输出口
R1=0x0001//选择通道LINE_IN为IOA0
[P_ADC_MUX_Ctrl]=R1
R1=0x0001//允许A/D转换
[P_ADC_Ctrl]=R1
ZH:
R1=[P_ADC_MUX_Data]//判断是否转换完成?
读取P_ADC_MUX_Data的值
TESTR1,0x8000
JZZH
R1=[P_ADC_MUX_Data]
R1=R1LSR4
R1=R1LSR2
R1=0X0001//清狗
[P_watchdog_clear]=R1
JMPZH
//使用C语言A/D转换
#defineP_ADC_MUX_Ctrl(volatileunsignedint*)0X702B
#defineP_ADC_Ctrl(volatileunsignedint*)0X7015
#defineP_ADC_MUX_Data(volatileunsignedint*)0X702C
unsignedinti;
unsignedintj;
*P_IOA_Dir=0x0000;
//A口初始化悬浮输入口
*P_IOA_Data=0x0000;
*P_IOA_Attrib=0x00FF;
*P_IOB_Dir=0x00FF;
//B口初始化同相低电平输出口
*P_IOB_Attrib=0x00FF;
*P_IOB_Data=0x0000;
*P_ADC_MUX_Ctrl=0x0001;
//选择通道LINE_IN为IOA0
*P_ADC_Ctrl=0x0001;
//允许A/D转换
for(i=0;
5;
++i);
//等待
while
(1)
i=*P_ADC_MUX_Data;
//判断是否转换完成?
i=i&
0x8000;
if(i==0);
j=*P_ADC_MUX_Data;
j>
>
=6;
//右移6位
*P_IOB_Data=j;
*P_watchdog_clear=0X0001;
//清狗
}
//使用汇编语言实现A口作为输入口、B口作为输出口触键唤醒
.defineP_INT_Ctrl0X7010
.defineP_IOA_Latch0X7004
.defineP_INT_Clear0X7011
R1=0x00FD//设置IOA1为带下拉电阻的输入口,其他IOA口都设置为输出口
R1=0x00FF//B口初始化初始化IOB口为同相低电平输出口
INTOFF
R1=0X0080//开启唤醒中断
[P_INT_Ctrl]=R1
R1=0X0000//熄灭灯
R1=[P_IOA_Latch]//锁存IOA数据[P_IOA_Data]
INTIRQ
R1=0X0007//睡眠
[P_SystemClock]=R1
LP2:
R1=0X0001//清狗
JMPLP2
.TEXT
.PUBLIC_IRQ3
_IRQ3:
INTOFF
PUSHR1,R4TO[SP]
R1=0X0080//是否是触键唤醒
TESTR1,[P_INT_Ctrl]
JZEXIT
R1=0XFFFF//点亮8颗灯
[P_IOB_Data]=R1
EXIT:
R1=0X0080//清中断
[P_INT_Clear]=R1
POPR1,R4FROM[SP]
INTIRQ
RETI
.END
#defineP_INT_Ctrl(volatileunsignedint*)0X7010
#defineP_IOA_Latch(volatileunsignedint*)0X7004
#defineP_INT_Clear(volatileunsignedint*)0X7011
intmain(void)
{
ASM("
INTOFF"
);
*P_IOA_Dir=0x00FD;
//设置IOA1为带下拉电阻的输入口,其他IOA口都设置为输出口
*P_IOA_Attrib=0x00FD;
*P_IOA_Data=0x0000;
//B口初始化初始化IOB口为同相低电平输出口
*P_IOB_Attrib=0x00FF;
*P_IOB_Data=0x0000;
*P_INT_Ctrl=0X0080;
//开启唤醒中断
*P_IOB_Data=0X0000;
//熄灭灯
i=*P_IOA_Latch;
//锁存IOA数据
INTIRQ"
//开中断
*P_SystemClock=0X0007;
//睡眠
while
(1)
//清狗
unsignedintt;
voidIRQ3(void)__attribute__((IS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 凌阳 SPCE061A 单片机 实验 程序