武汉大学计算机电气,武汉大学电气工程学院计算机课程设计2:锯齿波与三角波...

a7f4a3f590493a1e451dd952a488fd7c.gif 武汉大学电气工程学院计算机课程设计2:锯齿波与三角波

(5页)

39c188c428ca9cc1c8c9fb93c61a79df.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

7.9 积分

一、 课题内容及要求编程利用0832芯片产生锯齿波和正弦波,并用示波器观察输出波形。二、 方案(1)0832芯片输出锯齿波,只需由AL中存放数据的增减来控制。当AL中数据从00逐渐增加到FF产生溢出,再从00增大到FF,不断循环,从而产生连续不断的锯齿波。(2)0832芯片输出正弦波,需先做出正弦波一个周期特征点的表。通过查表,将表中的点输出,从而产生正弦波。由于0832不能输出负数,将输出向上平移使得sin(0)输出在0832输出范围的中点,计算正弦波y=128+128*sin(x),得到如下正弦波函数表。表1. 正弦波一个周期特征点表序号正弦值序号正弦值序号正弦值序号正弦值01285025510012815001132512551011231510213652255102119152031405325510311515304144542541041111541514855254105107155161515625310610415627155572521071001573815958251108961584916359250109921595101676024911088160611171612481118416171217562247112801628131786324511377163101418264243114731641215186652421156916513161896624011666166151719367238117621671718196682361185916819191996923311956169222020370231120521702421206712291214917126222097222612246172292321273224123431733124215742211244017434252187521812537175372622176215126341764027224772121273117743序号正弦值序号正弦值序号正弦值序号正弦值282267820912829178462922979206129261794930231802031302418052312338119913122181563223682196132191825933238831931331718362342408418913415184663524285186135131856936243861821361218673372458717813710187773824788175138818880392488917113971898440249901671406190884125091163141519192422519215914241929643252931551433193100442539415114421941044525495148145119510746254961441461196111472559714014701971154825598136148019811949255991321490199123三、 工作原理说明锯齿波产生原理:1、 初始化,设置输出端口DX=8000H,AL初始值00H2、 AL自增3、 输出AL4、 重复第2、3步直至AL=0FFH5、 输出AL6、 AL自增溢出得AL=00H7、 重复第4步正弦波产生原理:1、 初始化,设置输出端口DX=8000H2、 设置CX=2003、 [DS:SI]指向数据表DATA首地址4、 读入一个数据5、 将读入的数据输出6、 重复④、⑤步200次(即取正弦波200个点)7、 重复②-⑥步四、 程序功能描述及程序流程锯齿波产生的程序:CODE SEGMENTASSUME CS:CODEDAPORT EQU 8000h ORG 12b0HSTART: JMP DACONTORLDACONTORL:MOV DX,DAPORT MOV AL,00HDACON1: OUT DX,AL INC AL JMP DACON1CODE ENDSEND START锯齿波产生的程序流程图:AL中的数据输出到0832AL自增开始数据00送AL寄存器初始化图1. 锯齿波产生的程序流程图正弦波产生的程序:CODE SEGMENT ASSUME CS:CODE,DS:DATAORG 1400HSTART: MOV DX 8000HCIRCLE: MOV CX,200 LEA SI,OFFSET DATA1LOOP1: LODSB OUT DX,AL LOOP LOOP1 JMP CIRCLEDATA1: DB 128,132,136,140,144,148,151,155,159,163DB 167,171,175,178,182,186,18 关 键 词: 武汉大学 电气 工程学院 计算机 课程设计 锯齿 三角

4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

关于本文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于生成STM32上的正弦数据表,可以使用以下方法: 1. 使用数学函数生成正弦数据:可以使用标准数学库中的sin函数来生成正弦的采样点。假设你需要生成一个周期为2pi、采样点数为N的正弦,可以使用以下代码: ```c #include <math.h> #define PI 3.1415926535 #define N 100 // 采样点数 float sinTable[N]; int main() { for(int i = 0; i < N; i++) { float angle = 2 * PI * i / N; sinTable[i] = sin(angle); } // 此时sinTable数组中存放了正弦的N个采样点 // 可以在程序中使用这些数据来生成正弦形 // ... return 0; } ``` 2. 使用预先计算好的正弦数据表:如果你需要高精度的正弦数据,可以事先在计算机上生成一个正弦数据表,并将其存储到STM32的存储器中。然后在程序中直接读取这个数据表即可。 例如,在计算机上使用Python生成一个正弦数据表,并将其保存到文件中: ```python import math import numpy as np N = 1000 # 采样点数 amplitude = 1000 # 振幅 # 生成正弦数据 x = np.linspace(0, 2 * np.pi, N) sin_data = amplitude * np.sin(x) # 保存数据到文件 with open("sin_table.txt", "w") as f: for val in sin_data: f.write(str(int(val)) + "\n") ``` 然后在STM32的程序中,读取这个数据表: ```c #include <stdio.h> #define N 1000 // 采样点数 int sinTable[N]; int main() { // 从文件中读取正弦数据表 FILE *fp = fopen("sin_table.txt", "r"); if (fp == NULL) { printf("Failed to open file\n"); return 1; } for (int i = 0; i < N; i++) { fscanf(fp, "%d", &sinTable[i]); } // 关闭文件 fclose(fp); // 此时sinTable数组中存放了正弦的N个采样点 // 可以在程序中使用这些数据来生成正弦形 // ... return 0; } ``` 以上是两种生成STM32正弦数据表的方法,你可以根据自己的需求选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值