打印
[活动专区]

【赛元95F】第一步:点灯

[复制链接]
1734|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
计算机编程第一步是实现Hello world!
单片机编程第一步实现:点灯
这包含着如何正确使用硬件连接电脑,如何安装开发软件,配置开发环境,如何编译成目标代码,如何烧录目标代码到芯片。
因为时间问题,硬件里的固件是跟目前官方提供的不一致的,因此需要安装开发软件,烧录软件,并升级固件。
这一切都在这个文件里。
SC LINK资料.rar (39.33 MB)
然后升级固件

按着SC-LINK上的那个按键,那个唯一的按键(start),然后连接到电脑,然后上图就变的升级固件可以用了,同时开发板上的红灯会一直闪。

然后按照提示找到那个新的固件,升级就行了。
重新插拔SC-LINK
就可以正常烧录了。
接下来我分享一个我写的点灯程序。
/*
SC95F8617 test .
GPIO说明
PxCON=0x00;设置为高阻输入模式
PxCON=0xFF;设置为推挽输出模式
PxPH = 0xFF;设置上拉电阻
*/
#include"SC95F861x_C.H"
#include"stdio.h"
#define LEDS P0
void delay(void);
void GPIO_Init(void);
void Timer0_Init(void);

void main(void)
{
        unsigned char i;

        GPIO_Init();
        Timer0_Init();
                while(1)
        {
                for(i=0;i<8;i++)
                {
                        LEDS=(1<<i);
                        delay();
                }
        }


}

void delay(void)
{
        char i=10;
        while(i--)
        {
                //定时50ms
                TH0 = 0x03C;
                TL0 = 0xB0;
                TR0=1;
                while(TF0==0);
                TF0=0;
                TR0=0;
        }

}

void GPIO_Init(void)
{
        P0CON=0xFF;
}
void Timer0_Init(void)
{
/*
        TCON,定时器控制寄存器,    |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-|
       
        TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00|
        模式0:13位定时器计数器模式
        模式1:16位定时器计数器模式
        模式2:8位自动重载模式
        模式3:两个8位定时器计数器模式
*/
        TMOD=0x01;
}
测试效果如下,因为我还在家隔离,所以没有多余的测试元件,我从玩具里搞了几个LED。

使用特权

评论回复

相关帖子

沙发
gaoyang9992006|  楼主 | 2020-3-15 13:46 | 只看该作者
以上代码我是按照时钟晶振12Mhz,算的,实际上不是12,我要研究一下,默认是用的哪个竞争,内部振荡器非常快的,我要体验一下。

使用特权

评论回复
板凳
gaoyang9992006|  楼主 | 2020-3-15 14:29 | 只看该作者
本帖最后由 gaoyang9992006 于 2020-3-15 14:58 编辑

经过测试默认是12分频的32Mhz时钟。然后这样就可以实现1S频率的闪烁了。
/*
/*
SC95F8617 test .
GPIO说明
PxCON=0x00;设置为高阻输入模式
PxCON=0xFF;设置为推挽输出模式
PxPH = 0xFF;设置上拉电阻
*/
#include"SC95F861x_C.H"
#include"stdio.h"
#define LEDS P0
void delay(void);
void GPIO_Init(void);
void Timer0_Init(void);

void main(void)
{
//        unsigned char i;

        GPIO_Init();
        Timer0_Init();
                while(1)
        {
                P00=~P00;
                delay();
/*
                for(i=0;i<8;i++)
                {
                        LEDS=(1<<i);
                        delay();
                }
                */
        }


}

void delay(void)
{
        int i=320;
        while(i--)
        {
                TL0 = (65536 - 50000)%256;    //时钟为Fsys,则溢出时间=50000*(1/Fsys);
                TH0 = (65536 - 50000)/256;
                TR0=1;
                while(TF0==0);
                TF0=0;
                TR0=0;
        }

}

void GPIO_Init(void)
{
        P0CON=0xFF;
}
void Timer0_Init(void)
{
/*
        TCON,定时器控制寄存器,    |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-|
       
        TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00|
        模式0:13位定时器计数器模式
        模式1:16位定时器计数器模式
        模式2:8位自动重载模式
        模式3:两个8位定时器计数器模式
*/
//设置定时器0工作模式1       
        TMOD        |=        0x01;
//设置定时器0时钟源不分频,32MHz;默认是12分频       
        TMCON        |=        0x01;
}

使用特权

评论回复
地板
单模先声| | 2020-3-15 15:36 | 只看该作者
这个延时是来搞笑的?

使用特权

评论回复
评论
gaoyang9992006 2020-3-15 16:40 回复TA
定时器延时而已,不用大惊小怪。 
5
zhuotuzi| | 2020-3-15 15:43 | 只看该作者
单模先声 发表于 2020-3-15 15:36
这个延时是来搞笑的?

??大神,延时应该怎么做,我没看懂。

使用特权

评论回复
6
gaoyang9992006|  楼主 | 2020-3-15 16:39 | 只看该作者
优化了一下这个点灯程序。
/*
SC95F8617 test .
GPIO说明
PxCON=0x00;设置为高阻输入模式
PxCON=0xFF;设置为推挽输出模式
PxPH = 0xFF;设置上拉电阻
*/
#include"SC95F861x_C.H"
#include"stdio.h"
#define LEDS P0
void delay(void);
void GPIO_Init(void);
void Timer0_Init(void);

void main(void)
{
        unsigned char i;

        GPIO_Init();
        Timer0_Init();
                while(1)
        {

                for(i=0;i<8;i++)
                {
                        LEDS=(1<<i);
                        delay();
                }
        }


}

void delay(void)
{
//设置为320,延时0.5S,设置到80即延时0.125S,8个IO口跑马灯则每个IO的闪烁频率刚好是1Hz
        int i=80;
        TR0=1;
        while(i--)
        {
                TL0 = (65536 - 50000)%256;    //时钟为Fsys,则溢出时间=50000*(1/Fsys);
                TH0 = (65536 - 50000)/256;
                while(TF0==0);
                TF0=0;
        }
                TR0=0;
}

void GPIO_Init(void)
{
        P0CON=0xFF;
}
void Timer0_Init(void)
{
/*
        TCON,定时器控制寄存器,    |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-|
       
        TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00|
        模式0:13位定时器计数器模式
        模式1:16位定时器计数器模式
        模式2:8位自动重载模式
        模式3:两个8位定时器计数器模式
*/
//设置定时器0工作模式1       
        TMOD        |=        0x01;
//设置定时器0时钟源不分频,32MHz;默认是12分频       
        TMCON        |=        0x01;
}


使用特权

评论回复
7
qwe123zxc| | 2020-3-15 18:12 | 只看该作者
真不错,程序都有了

使用特权

评论回复
8
一路向北lm| | 2020-3-15 20:09 | 只看该作者
gaoyang9992006 发表于 2020-3-15 16:39
优化了一下这个点灯程序。

板子都已经收到了?

使用特权

评论回复
9
一路向北lm| | 2020-3-15 20:09 | 只看该作者
板子还没有呢

使用特权

评论回复
10
gaoyang9992006|  楼主 | 2020-3-15 21:01 | 只看该作者

如果申请了,应该很快就收到了,坐等吧,或者关注顺丰公众号。会微信提醒。

使用特权

评论回复
11
小灵通2018| | 2020-3-16 11:13 | 只看该作者
例子很棒,多谢分享。学了一招51内核单片机的延时函数编写方法。

使用特权

评论回复
12
磊子忆君遥| | 2020-3-16 14:56 | 只看该作者
屌炸天的延时,哈哈哈

使用特权

评论回复
13
gaoyang9992006|  楼主 | 2020-3-16 15:39 | 只看该作者
磊子忆君遥 发表于 2020-3-16 14:56
屌炸天的延时,哈哈哈

哈哈,这是赞美之词吗?上面还有喷我搞笑的,我觉得吧,延时函数大于50个时钟周期的尽量用定时器延时法。跑空指令那种太不准了。

使用特权

评论回复
14
磊子忆君遥| | 2020-3-16 15:59 | 只看该作者
gaoyang9992006 发表于 2020-3-16 15:39
哈哈,这是赞美之词吗?上面还有喷我搞笑的,我觉得吧,延时函数大于50个时钟周期的尽量用定时器延时法。 ...

是好久没用延时了,大学的时候用的也是空指令,看你这个延时还挺有特色的,现在主要用中断定时做灯的闪烁,延时用在eep模拟i2c和SPI上,其他很少用到。

使用特权

评论回复
15
gaoyang9992006|  楼主 | 2020-3-16 16:59 | 只看该作者
磊子忆君遥 发表于 2020-3-16 15:59
是好久没用延时了,大学的时候用的也是空指令,看你这个延时还挺有特色的,现在主要用中断定时做灯的闪烁 ...

这个是仿照ARM内核的单片机的库函数做的。一般ARM内核的单片机厂家提供的库函数里面会有个延时函数。就是用这种方式实现。我是借鉴过来的。

使用特权

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

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1958

主题

15904

帖子

207

粉丝